사용자 정의 리파지토리

김민지·2022년 11월 15일
0

JPA

목록 보기
18/27
post-custom-banner

https://dazbee.tistory.com/84

다음은 두개의 인터페이스와 하나의 클래스의 정의예요
쿼리dsl강의에서 이런식으로 정의를 하더라구요 그런데 이건 한개의 엔티티가 두개의 리파지토리를 만드는꼴아닌가요?
그럼 헷갈릴텐데.,. 한개로 못합치나요? 왜 하나의 엔티티에서 두개의 리파지토리를 만드는건지 모르겠어요
memberRepositoryImpl: search라는 기능하나 제공해줌
MemberRepository: jpaRepository가 제공하는 기본기능 + findByUsername
-> Member에 대한 Repository 가 두개

public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByUsername(String userName);
}

public interface MemberRepositoryCustom {
    List<MemberTeamDto> search(MemberSearchCondition condition);
}

public class MemberRepositoryImpl implements MemberRepositoryCustom{
    private final JPAQueryFactory queryFactory;
    public MemberRepositoryImpl(EntityManager em){
        this.queryFactory = new JPAQueryFactory(em);
    }

    @Override
    public List<MemberTeamDto> search(MemberSearchCondition condition) {
        return null;
    }
}

-> 커스텀 리파지토리 상속받는걸 놓쳤었음

사용자 정의 인터페이스 만들기

  1. 사용자 정의 인터페이스 만들기 (아무 이름 OK, 아무것도 상속 안 받으면 됨)
  2. 사용자 정의 인터페이스에 구현할 메서드를 정의함.
  3. 1에서 구현한 인터페이스 구현. 반드시 이름은 "1번 인터페이스 이름 + Impl"로 해야함
  4. 스프링 데이터 JPA가 제공하는 인터페이스 Repository에서 1번을 상속 받는다
  5. 사용자 정의 Repository를 만들고, 이것을 JPA repository Interface에서 사용하려면 위 단계를 따라서 작성하면 된다.
  • 4번처럼 스프링 데이터 JPA가 제공하는 인터페이스 Repository에서 사용자가 만든 Repository 인터페이스를 상속하고, 사용자 정의 인터페이스 구현체의 이름이 Impl이면 스프링 데이터 JPA가 자동으로 인식해서 스프링 빈으로 등록해준다.
  • 사용자 정의 Repository의 구현체는 스프링 빈으로 등록할 필요가 없다. 스프링 데이터 JPA가 자동으로 해준다.

출처
https://ojt90902.tistory.com/712

profile
안녕하세요!
post-custom-banner

0개의 댓글