ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 사용자 정의 리포지토리
    SpringDataJPA 2022. 12. 29. 17:01

    사용자 정의 리포지토리

    구현 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고

    구현체는 스프링이 자동 생성 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음.

     

    JPA를 직접 사용한다거나... 스프링JDBC를 사용한다거나...

     

    먼저 사용자 정의할 인터페이스를 만든다.

    public interface MemberRepositoryCustom {
        List<Member> findMemberCustom();
    }

    이를 구현할 구현체를 만든다.

    @RequiredArgsConstructor
    public class MemberRepositoryImpl implements MemberRepositoryCustom {
    
        private final EntityManager em;
    
        @Override
        public List<Member> findMemberCustom() {
            return em.createQuery("select m from Member m")
                    .getResultList();
        }
    }

     

    public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {

    사용할 Reposiotory에 정의한 인터페이스를 implements시킨다.

    findMemberCustom()에 대한 구현은 다른 곳에서 했기 때문에 실제 실행지 구현된 대로 실행이 된다.

    (순수 자바에서는 물론 되지 않는다.)

     

    구현체에 대한 규칙이 있다.

    규칙: 리포지토리 인터페이스 이름 + Impl

    스프링 데이터 JPA가 인식해서 스프링 빈으로 등록하게 된다.

     

    복잡한 쿼리 또는 다른 것들을 사용(쿼리DSL이라던지...)할때 사용하도록 한다.

     

    스프링 데이터 2.x 부터는 사용자 정의 구현 클래스에 리포지토리 인터페이스 이름 + Impl 을 적용하는 대신에 사용자 정의 인터페이스 명 + Impl 방식도 지원한다.

    예를 들어서 위 예제의 MemberRepositoryImpl 대신에 MemberRepositoryCustomImpl 같이 구현해도 된다.

    728x90

    'SpringDataJPA' 카테고리의 다른 글

    SpringDataJPA의 구현체  (0) 2022.12.29
    페이징과 정렬2  (0) 2022.12.29
    벌크수정과 EntityGraph  (0) 2022.12.29
    페이징과 정렬  (0) 2022.12.28
    조회  (0) 2022.12.28

    댓글

Designed by Tistory.