[CS] QueryDSL with JPA

오의석·2023년 11월 3일
0

DSL = Domain-Specific-Languages / 특정 도메인에서 발생하는 문제를 효과적으로 해결하기 위해 설계된 언어

QueryDSL = SQL 형식의 쿼리를 Type-Safe 하게 생성할 수 있도록 DSL을 제공하는 라이브러리

QClass = 엔티티 클래스 속성과 구조를 설명해주는 메타데이터(Type-Safe)

서브쿼리 사용 방식
1. JPAQuery : 일반적으로 사용하는 쿼리문 생성. 사용범위가 넓음
2. JPAExpressions : 유틸성 클래스. 다양한 select 메서드 지원. 사용 범위가서브쿼리에 더 맞춰져 있음.

서브쿼리 JPAExpressions로 작성시 메인쿼리와 서브 쿼리를 분리하자.
서브쿼리를 함수로 빼는 것이 좋다.
그 때, QClass를 새로 생성하는 것이 좋다.
이유는 메인쿼리와 서브쿼리 사이의 별칭이 충돌하는 것을 방지할 수 있다.

QueryDSL의 장점!!!
1)동적 쿼리
-> BooleanExpression이 포인트!! 조건에 따라 쿼리를 바꿀 수 있게 세팅하는 것
-> where 절에 ,는 and를 의미. // 그래서 null을 반환하면 조건을 실행하지 않는 다는 것.

2)동적 정렬
-> OrderSpecifier이 포인트!!
-> 배열 순서대로 순차적으로 정렬한다는 것을 의미.

QueryDSL 정리
1. 가독성 향상. 메서드 네이밍을 통해 쿼리 조건, 정렬 방식 유추 가능
2. 메서드 분리를 통한 재사용성 향상
3. Type-safe한 Q클래스를 통한 문법으로 인한 런타임 에러 방지

단점
1. 1차 캐시 장점을 누릴 수 없다.(JPQL의 단점이라고 볼 수 있음)
-> DB한테 항상 쿼리를 보냄.. (JPQL 빌더의 느낌)
2. 마지막 버전이 2021년도...
3. 너무 긴 쿼리는 조심 (because 쿼리에 비즈니스 로직이 들어있는 것이 아닐지 의심하기)

profile
끊임없이 나아가는 사람이 되어볼게요.

0개의 댓글