오봉이와 함께하는 개발 블로그

Querydsl - 인터페이스 지원 (QuerydslPredicateExecutor) 본문

BE/JPA

Querydsl - 인터페이스 지원 (QuerydslPredicateExecutor)

오봉봉이 2022. 9. 20. 18:06
728x90

인터페이스 지원 - QuerydslPredicateExecutor

QuerydslPredicateExecutor 인터페이스

public interface QuerydslPredicateExecutor<T> {
    Optional<T> findById(Predicate predicate);
    Iterable<T> findAll(Predicate predicate);
    long count(Predicate predicate);
    boolean exists(Predicate predicate);
    // ... more functionality omitted.
}

리포지토리에 적용

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

테스트

@Test
void querydslPredicateExecutorTest() {
    Team teamA = new Team("teamA");
    Team teamB = new Team("teamB");

    em.persist(teamA);
    em.persist(teamB);

    Member member1 = new Member("member1", 10, teamA);
    Member member2 = new Member("member2", 20, teamA);
    Member member3 = new Member("member3", 30, teamB);
    Member member4 = new Member("member4", 40, teamB);

    em.persist(member1);
    em.persist(member2);
    em.persist(member3);
    em.persist(member4);

    QMember member = QMember.member;
    Iterable<Member> result = memberRepository.findAll(member.age.between(20, 40).and(memberusername.eq("member1")));

    for (Member member5 : result) {
        System.out.println("member5 = " + member5);
    }
}
  • 한계점
    • 조인이 불가능하다.
      • 묵시적 조인은 가능하지만, left join이 불가능하다.
    • 클라이언트가 Querydsl에 의존해야 한다.
      • 서비스, 컨트롤러 클래스가 Querydsl이라는 구현 기술에 의존해야 한다.
        • 파라미터가 Querydsl의 Predicate이기 때문.
    • 복잡한 실무환경에서 사용하기에는 한계가 명확하다.

QuerydslPredicateExecutor는 Pagable, Sort를 모두 지원하고 정상 동작한다.

인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
Comments