관심쟁이 영호

[#9.1] Spring Boot ㅣ 스프링 부트 ㅣ 회원 도메인 개발 본문

카테고리 없음

[#9.1] Spring Boot ㅣ 스프링 부트 ㅣ 회원 도메인 개발

관심쟁이 영호 2021. 4. 11. 17:23
반응형

1. 구현 기능

- 회원 등록

- 회원 목록 조회

 

2. 구현 순서

- 회원 엔티티 코드 다시 보기

- 회원 리포지토리 개발

- 회원 서비스 개발

- 회원 기능 테스트

 

순서는 이렇게 할 것이다.

실무에서 하는 방법대로 하신다고 하시니, 숙지해두면 좋을 순서일 것이다.

 


1. 회원 리포지토리 구현

리포지토리는 이전에 포스팅한 글에서 언급했듯이, DB에 JPA기술을 사용하여 직접 접근하는 것이다.

회원 리포지토리라 함은, DB에 저장되어있는 회원정보를 GET, SET하는 기능이 있을 것이다.

 

- repository pakage를 생성한다.

- repository pakage에 MemberRepository를 생성했다.

- 그리고 코드를 넣는다.

// MemberRepository.class

//스프링에게 이것이 "Repository"라고 알려주는 어노테이션 - 이렇게 하면 Component Scan에서 자동으로 스프링 Bean으로 관리해준다.
@Repository
public class MemberRepository {

    @PersistenceContext // 1. JPA 사용 표준 어노테이션
    private EntityManager em; // 2. 이렇게 해주면 스프링이 자동으로 엔티티 매니저를 만들어서 em에 주입시켜준다.

    public void save(Member member){ //저장
        em.persist(member);
    }

    public Member findOne(Long id) {
        //JPA에서 제공해주는 find 매서드이다. id값을 2번 파라미터로 넘기면 DB에서 id값을 찾아서 반환해준다.
        return em.find(Member.class, id);
    }

    public List<Member> findAll(){
        //전부다 찾아야 할 경우에는 jpql을 작성해야한다. - 두번째 파라미터가 반환타입이다.
        List<Member> result = em.createQuery("select m from Member m", Member.class)
        .getResultList(); // 반환된 것을 리스트로 만들어준다.
        return result;
    }

    public List<Member> findByName(String name){
        return em.createQuery("select m from Member m where m.name = :name", Member.class)
                //파라미터를 지정해주면 두번째 파라미터가 jpql에서의 :name부분에 매칭된다.
                .setParameter("name", name)
                .getResultList();
    }
}

- 주석에 있는 것을 다시한번 풀어써보면, 현재 클래스는 리포지토리이다. 그래서 스프링에게 알려주어야 한다.

@Repository를 추가해주자.

이렇게 되면 스프링이 자동으로 Component Scan 단계에서 스프링 bean으로 관리를 해준다.

이유는 @Repository가 @Component를 가지고 있기 때문이다.

 

- @PersistenceContext를 추가해준다.

이렇게 하면 스프링이 EntityManager를 만들고 해당 인스턴스에 주입을 해준다.

 

- 그 외 필요한 매서드를 생성하였다.

 

※ 기본편에서 다루는 JPQL에 대한 지식이 부족하다. 직접 쿼리문을 짜준 것을 볼 수 있는데 이유가 있겠지!

파악해두자.

 

 

본 강의는 인프런의 김영한 개발자님이 강의하고 계신

"실전! 스프링 부트와 JPA활용1 - 웹 애플리케이션 개발"을 수강하면서 정리한 글입니다.

 

300x250
Comments