-
동적쿼리란? with QuerydslJPA 2022. 9. 7. 00:01
정적 쿼리란?
어떤 조건 상황에도 변경되지 않는 쿼리문
동적 쿼리란?
상황에 따라 다른 문법의 SQL을 적용하는 것을 뜻합니다.
보통 선택적인 옵션에 따라 데이터 검색이 가능한 경우 사용합니다.
DB에서 값을 조회할 때 조회 조건이 동적으로 바뀌어야 하는 경우가 많습니다.
이런 상황을 Querydsl을 사용하면 손쉽게 해결할 수 있습니다.
name 값이 들어오면 WHERE name = ${name}
age 값이 들어오면 WHERE age = ${age}
name과 age가 모두 들어오면 WHERE name = ${name} AND age = ${age}
name과 age 모두 들어오지 않으면 WHERE 절을 사용하지 않습니다.
이런 상황들을 어떻게 해결해야 할까요?
1. 순수 JPQL로 해결하기
jpql을 문자열로 만든 뒤 조건에 따라 jpql에 string을 추가하는 방식으로 사용합니다.
jpql에 띄어쓰기 하나라도 틀리면 오류가 발생합니다.
isFirstCondition 변수로 각각 첫 번째 조건인지 확인하고 변수가 null인지 검사하여 쿼리문에 param을 세팅합니다.
2. Criteria
Spring의 표준 스펙이지만 실무에서 사용하지 않는다고 합니다.
사용성이 복잡해서 어떤 쿼리가 나가는지 파악할 수 없습니다.
3. QueryDSL
Querydsl은 오픈소스 프로젝트이며 데이터 조회 기능에 특화되어 있습니다.
문법적으로 잘못된 쿼리를 허용하지 않으며 핵심 원칙으로 타입 안정성과 일관성을 추구합니다.
출처
http://querydsl.com/static/querydsl/3.6.3/reference/ko-KR/html_single/
http://querydsl.com/static/querydsl/latest/reference/html/
https://jaehoney.tistory.com/185
https://data-make.tistory.com/615
'JPA' 카테고리의 다른 글
QueryDSL StringTemplate이란? (0) 2023.02.03 QueryDSL이란? (0) 2023.02.01 QueryDSL fetchCount() deprecated 대안 (0) 2022.12.07 OSIV란? (0) 2022.08.16 JPA란? (+ORM이란?) (0) 2022.04.04