지금부터 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기는 많이 부족하다고 한다. 그래서 어떤 기능인지 간단하게 알아보고 어떤 점이 부족한건지 알아보려고 한다!
QuerydslPredicateExecutor
]🔗 공식 문서
QuerydslPredicateExecutor
인터페이스public interface QuerydslPredicateExecutor<T> {
Optional<T> findById(Predicate predicate); //1
Iterable<T> findAll(Predicate predicate); //2
long count(Predicate predicate); //3
boolean exists(Predicate predicate); //4
// … more functionality omitted.
}
①: predicate
와 일치하는 단일 엔티티를 찾아서 반환한다.
②: predicate
와 일치하는 모든 항목을 찾아서 반환한다.
③: predicate
와 일치하는 엔티티의 수를 반환한다.
④: predicate
와 일치하는 엔티티가 있는지 여부를 반환한다.
Querydsl 지원
을 사용하려면 다음과 같이 리포지토리 인터페이스에서 extend
해주자!
interface MemberRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {
}
Iterable result = memberRepository.findAll(
member.age.between(10, 40)
.and(member.username.eq("member1"))
);
left join
이 불가능하다.)Querydsl
에 의존해야 한다. 서비스 클래스가 Querydsl
이라는 구현 기술에 의존해야 한다.📌 참고
QuerydslPredicateExecutor
는 Pageable, Sort를 모두 지원하고 정상 동작한다.
Querydsl Web
지원 ]🔗 공식 문서
QuerydslRepositorySupport
]getQuerydsl().applyPagination()
스프링 데이터가 제공하는 페이징을 Querydsl로 편리하게 반환 가능하다. (단! Sort
는 오류 발생)from()
으로 시작하는 것이 가능하다. (최근에는 QueryFactory
를 사용해서 select()
로 시작하는 것이 더 명시적)Querydsl 3.x
버전을 대상으로 만들어서 Querydsl 4.x
에 나온 JPAQueryFactory
로 시작할 수 없다.select
로 시작할 수 없다. from
으로 시작해야 함!QueryFactory
를 제공하지 않는다.