-
7. 스프링 데이터 JPA가 제공하는 Querydsl 기능Spring-Boot/실전! Querydsl 2023. 3. 31. 09:21
- 여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다.
- 그래도 스프링 데이터에서 제공하는 기능이므로 간단히 소개하고, 왜 부족한지 설명한다.
1. 인터페이스 지원 - QuerydslPredicateExecutor
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom, QuerydslPredicateExecutor<Member> { }
@Test public void querydslPredicateExecutorTest() { QMember member = QMember.member; Iterable<Member> result = memberRepository.findAll(member.age.between(10, 40).and(member.username.eq("member1"))); for (Member findMember : result) { System.out.println("member1 = " + findMember); } }
* 한계점 *
- 조인X (묵시적 조인은 가능하지만 left join이 불가능하다.)
- 클라이언트가 Querydsl에 의존해야 한다. 서비스 클래스가 Querydsl이라는 구현 기술에 의존해야 한다.
- 복잡한 실무환경에서 사용하기에는 한계가 명확하다.
* 참고 : `QuerydslPredicateExecutor`는 Pageable, Sort를 모두 지원하고 정상 동작한다.
2. Querydsl Web 지원
* 한계점 *
- 단순한 조건만 가능
- 조건을 커스텀하는 기능이 복잡하고 명시적이지 않음
- 컨트롤러가 Querydsl에 의존
- 복잡한 실무환경에서 사용하기에는 한계가 명확
3. 리포지토리 지원 - QuerydslRepositorySupport
* 장점 *
- `getQuerydsl().applyPagination()` 스프링 데이터가 제공하는 페이징을 Querydsl로 편리하게 변환 가능 (단! Sort는 오류 발생)
- `from()`으로 시작 가능(최근에는 QueryFactory를 사용해서 `select()`로 시작 하는 것이 더 명시적)
- EntityManager 제공
* 한계 *
- Querydsl 3.x 버전을 대상으로 만듬
- Querydsl 4.x에 나온 JPAQueryFactory로 시작할 수 없음
ㆍselect로 시작할 수 없음 ( from으로 시작해야함 )
- `QueryFactory`를 제공하지 않음
- 스프링 데이터 Sort 기능이 정상 동작하지 않음
4. Querydsl 지원 클래스 직접 만들기
- 스프링 데이터가 제공하는 `QuerydslRepositorySupprot` 가 지닌 한계를 극복하기 위해 직접 Querydsl 지원 클래스 사용
* 장점 *
- 스프링 데이터가 제공하는 페이징을 편리하게 변환
- 페이징과 카운트 쿼리 분리 가능
- 스프링 데이터 Sort 지원
- `select()`, `selectFrom()`으로 시작 가능
- `EntityManager`, `QueryFactory` 제공
'Spring-Boot > 실전! Querydsl' 카테고리의 다른 글
6. 실무 활용 - 스프링 데이터 JPA와 Querydsl (0) 2023.03.30 4. 실무 활용 - 순수 JPA와 Querydsl (0) 2023.03.20 3. 중급 문법 (0) 2023.03.17 2. 기본문법 (0) 2023.03.13 1. 프로젝트 환경설정 & 예제 도메인 모델 (0) 2023.03.08