[4] 스프링 부트와 JPA 활용 (4) - 동적 쿼리 (JPQL vs Criteria vs QueryDSL)

동적 쿼리
[ Intro ]
-
동적 쿼리?
: 같은 기능을 하지만 동적으로 들어오는 파라미터에 의해 조건이 바뀌게 설계되는 쿼리
ex) 검색 기능 구현시 값이 없으면 전체 정보, 있으면 맞는 정보를 반환
- 방법
순수 JPQL
Criteria
QueryDSL
- 살펴 볼 예시
: Member.name 과 Order.status 정보에 따른 검색 기능
데이터가 반드시 넘어온다면 이렇게 처리할 수 있음

데이터가 null값으로 넘어오는 경우에는 동적 쿼리로 작성해야 함
[ 순수 JPQL ]

jpql을 문자열로 만든 뒤 조건에 따라 jpql에 string을 추가하는 방식
--> jpql에 띄어쓰기 하나라도 틀리면 오류발생
-
isFirstCondition 변수로 각각 null값인지 검사하면 첫번째 조건인지 확인
[ Criteria ]

Criteria는 Spring의 표준 스펙이지만 실무에서 사용 X
사용성이 복잡해서 어떤 쿼리가 나가는지 도무지 파악 X
[ QueryDSL ]

- 자세한
QueryDSL은 뒤에서 다루겠지만 확실히 가시성과 사용성 이 좋아보임