인터페이스 지원 - QuerydslPredicateExecutor
- QuerydslPredicateExecutor 인터페이스
public interface QuerydslPredicateExecutor<T> {
Optional<T> findOne(Predicate predicate);
Iterable<T> findAll(Predicate predicate);
Iterable<T> findAll(Predicate predicate, Sort sort);
Iterable<T> findAll(Predicate predicate, OrderSpecifier<?>... orders);
Iterable<T> findAll(OrderSpecifier<?>... orders);
Page<T> findAll(Predicate predicate, Pageable pageable);
long count(Predicate predicate);
boolean exists(Predicate predicate);
<S extends T, R> R findBy(Predicate predicate, Function<FluentQuery.FetchableFluentQuery<S>, R> queryFunction);
}
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom, QuerydslPredicateExecutor<Member> {
List<Member> findByUsername(String username);
}
Iterable<Member> result = memberRepository.findAll(
member.age.between(10, 40).and(member.username.eq("member1")));
- 한계점
- 조인X(묵시적 조인은 가능하나 left join은 안됨)
- 클라이언트가 Querydsl에 의존. 서비스 클래스가 Querydsl에 의존해야함
- 복잡한 실무에서 사용하기에는 한계가 명확함
Querydsl Web 지원
- 한계점
- 단순한 조건만 가능
- 조건을 커스텀 하는 기능이 복잡하고 명시적이지 않음
- 컨트롤러가 Querydsl에 의존
- 복잡한 실무 환경에서 사용하기에는 한계가 명확
리포지토리 지원 - QuerydslRepositorySupport
- 장점
getQuerydsl().applyPagination() : 스프링 데이터가 제공하는 페이징을 Querydsl로 편리하게 변환 가능(단! Sort는 오류발생)
from()으로 시작 가능(최근에는 QueryFactory를 사용해서 select()로 시작하는 것이 더 명시적임)
- EntityManager 제공
- 단점
- Querydsl 3.x버전을 대상으로 만듦
- Querydsl 4.x에 나온 JPAQueryFactory로 시작할 수 없음
- select로 시작할 수 없음(from으로 시작해야함)
- QueryFactory를 제공하지 않음
- 스프링 데이터 sort 기능이 정상 작동하지 않음