동적쿼리란? with Querydsl
정적 쿼리란?
어떤 조건 상황에도 변경되지 않는 쿼리문
동적 쿼리란?
상황에 따라 다른 문법의 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