오봉이와 함께하는 개발 블로그
Querydsl - 인터페이스 지원 (QuerydslPredicateExecutor) 본문
728x90
인터페이스 지원 - QuerydslPredicateExecutor
- 공식 URL : https://docs.spring.io/spring-data/jpa/docs/2.2.3.RELEASE/reference/html/ #core.extensions.querydsl
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이기 때문.
- 서비스, 컨트롤러 클래스가 Querydsl이라는 구현 기술에 의존해야 한다.
- 복잡한 실무환경에서 사용하기에는 한계가 명확하다.
- 조인이 불가능하다.
QuerydslPredicateExecutor
는 Pagable, Sort를 모두 지원하고 정상 동작한다.
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
'BE > JPA' 카테고리의 다른 글
Querydsl - 스프링 데이터 페이징 활용 3 (컨트롤러 개발) (1) | 2022.09.20 |
---|---|
Querydsl - 스프링 데이터 페이징 활용 2 (CountQuery 최적화) (0) | 2022.09.20 |
Querydsl - 스프링 데이터 페이징 활용 1 (Querydsl 페이징 연동) (0) | 2022.09.20 |
Querydsl - 스프링 데이터 JPA 사용자 정의 리포지토리 (0) | 2022.09.20 |
Querydsl - 스프링 데이터 JPA 리포지토리로 변경 (1) | 2022.09.20 |
Comments