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

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지 한번에 해결, 본 강의는 자바 백엔드 개발의 실전 코스를 완성하는 마지막 강의 입니다. 스프링 부트와 JPA 실무 완전 정복 로드맵을 우선 확인해주세요. 로드

www.inflearn.com


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
반응형