Study/실전! QueryDSL
Day 6. Spring Data JPA에서 지원하는 QueryDSL
주지민
2021. 10. 7. 12:56
반응형
본 포스트는 인프런 - 실전! QueryDSL의 강의를 듣고 공부한 내용입니다
https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84
1. Spring Data JPA에서 지원하는 QueryDSL
- 지금부터 소개하는 기술은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족합니다
- 그대로 Spring Data JPA에서 지원하는 기능이므로 간략한 소개만 하겠습니다
1-1. QuerydslPredicateExecutor
- org.springframework.data.querydsl.QuerydslPredicateExecutor
- 정의된 메서드 기능을 쓸 수 있고, 파라미터로 QueryDSL 조건을 넣을 수 있다
- 예제 코드
// Repository public interface MemberRepository extends QuerydslPredicateExecutor { ... }
// 사용 예제 memberRepository.findAll(QMember.member.age.between(20,30));
- 파라미터로 기존에 Q-Type으로 정의했던 Where절 조건들이 들어갈 수 있다
- 한계점
- 조인X ( 묵시적 조인은 가능하지만, left join이 불가능 ), 한 테이블에서만 동작하기에 용이...
- 파라미터로 넘겨야하는게 특화된 기술인 QueryDSL이다. 즉 Repository를 가져다 쓰는 Layer에서 QueryDSL 기술의 의존성을 가지게된다..
1-2. @QuerydslPredicate
- 해당 어노테이션으로 Controller에서 파라미터 바인딩을 해주고 앞서 말했던 QuerydslPredicateExecutor의 파라미터(Predicate)로 넘기면 QueryDSL의 조건문을 알아서 생성한다
- 사실상 eq 계열만 된다(contains, in)
- 커스텀하기 심각하게 복잡..
1-3. QueryRepositorySupport
- org.springframework.data.jpa.repository.support.QueryRepositorySupport
- QueryDSL을 쓰기위해서 Repository가 상속받으면 편한 추상 클래스
- 제공되는 기능
- EntityManager 사용 가능 ( QueryRepositorySupport가 주입받음 )
- from절부터 시작하는 메서드 체이닝 지원 ( 직접 JpaQueryFactory를 주입안받아도 된다 )
- 손쉬운 Paging 기능 ( getQueryDsl().applyPagination() 사용, 단.. Sort가 정상적으로 안됨 )
- 한계점
- select()로 시작할 수 없음 ( 어색.. )
- queryFactory를 사용하게끔 지원하지 않음
- QueryDSL 3.X를 기준으로 만들어짐 ( 현재 QueryDSL 4.X )
728x90
반응형