사용자 정의 리포지토리
- QueryDSL은 JPQL 빌더 역할을 한다.
- 즉, 실제 데이터를 다루는 부분은 JPA가 한다.
- JPA Repository에서 QueryDSL을 사용하기 위해서는 사용자 정의 리포지토리가 필요하다.
사용 방법
- Spring Data JPA의 JPARepository를 상속받은 인터페이스를 생성한다.
public interface MemberRepository extends JpaRepository<Member, Long> {
//...
}
- 사용자 정의 리포지토리에 대한 인터페이스를 생성한다.
public interface MemberRepositoryCustom {
//...
}
- 2번에서 만든 인터페이스를 1번에서 생성한 인터페이스의 상속 목록에 추가한다.
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
//...
}
- 2번에서 만든 인터페이스의 기능을 실제로 구현하기 위한 클래스를 생성한다.
public class MemberRepositoryCutomImpl implements MemberRepositoryCustom {
//...
}
- 생성할 기능을 인터페이스와 클래스에서 각각 정의한다.
//인터페이스
List<MemberDto> search(String username);
//클래스
@Override
public List<MemberDto> search(String username) {
return
queryFactory
.select(
new QMemberDto(
member.username,
member.age
)
)
.from(member)
.where(
member.username.eq(username)
)
.fetch();
}
- 필요한 곳에서 사용한다.
@Test
public void customRepositoryTest() {
Member member1 = new Member("member1", 10);
Member member2 = new Member("member2", 20);
Member member3 = new Member("member3", 30);
Member member4 = new Member("member4", 40);
em.persist(member1);
em.persist(member2);
em.persist(member3);
em.persist(member4);
List<MemberDto> result = memberRepository.search("member1");
assertThat(result.get(0).getUsername()).isEqualTo("member1");
}
출처