스프링/QueryDsl

[QueryDsl] SpringDataJPA가 제공하는 QuerydslPredicateExecutor 인터페이스 사용해서 간단 Table Repository 기능 구현하기 (Predicate 직접삽입)

nomoreFt 2022. 3. 22. 01:00

1.기존 SpringDataJpa Repository에 새로 QuerydslPredicateExecutor를 상속받는다. (인터페이스)

public interface MemberRepository extends JpaRepository<Member, Long> , MemberRepositoryCustom , QuerydslPredicateExecutor<Member> {
    //select m from Member m where m.username = ?
    List<Member> findByUsername(String username);

}

기본적인 사용법


   @Test
    public void querydslPredicateExecutorTest() throws Exception {
        QMember member = QMember.member;
        Iterable<Member> result = memberRepository.findAll(member.age.between(10, 40).and(member.username.eq("member1")));
        for (Member findMember : result) {
            System.out.println(findMember);
        }
    }
  • left join이 불가능 하기 때문에 실용적이지 않다.
  • service, controller의 기술들이 repository의 queryDsl 기술에 의존관계가 함께 생긴다.
    (순수한 dto 객체만 만들어서 넘기는게 아니라, QueryDsl의 Predicate를 조합해서 보내야하기 때문)
  • 결과적으로 실무 비추, 그러나 간단한 1차원 Table 이용시에는 사용 고려해볼만 하다.