[4] 스프링 부트와 JPA 활용 (4) - 동적 쿼리 (JPQL vs Criteria vs QueryDSL)
![post-thumbnail](https://velog.velcdn.com/images/neity16/post/18c7c64d-8517-4005-b1f2-3810e14af7a1/spring.png)
동적 쿼리
[ Intro ]
-
동적 쿼리
?
: 같은 기능
을 하지만 동적으로 들어오는 파라미터
에 의해 조건
이 바뀌게 설계
되는 쿼리
ex) 검색 기능
구현시 값
이 없으면 전체 정보
, 있으면 맞는 정보
를 반환
- 방법
순수 JPQL
Criteria
QueryDSL
- 살펴 볼 예시
: Member.name
과 Order.status
정보에 따른 검색 기능
데이터가 반드시 넘어온다면
이렇게 처리할 수 있음
![](https://velog.velcdn.com/images%2Fneity16%2Fpost%2Fa0db8aab-a2ef-41b9-84b2-290c511489fc%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.47.46.png)
데이터가 null값으로 넘어오는 경우
에는 동적 쿼리
로 작성해야 함
[ 순수 JPQL ]
![](https://velog.velcdn.com/images%2Fneity16%2Fpost%2Fcfffd357-a509-4456-b4cd-fa66070638d2%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.55.18.png)
jpql
을 문자열
로 만든 뒤 조건
에 따라 jpql
에 string
을 추가
하는 방식
--> jpql
에 띄어쓰기 하나
라도 틀리면 오류
발생
-
isFirstCondition
변수로 각각 null값인지 검사하면 첫번째 조건인지 확인
[ Criteria ]
![](https://velog.velcdn.com/images%2Fneity16%2Fpost%2F526d35a9-7c1e-4b20-a47c-c16365bd99ee%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.08.03.png)
Criteria
는 Spring의 표준 스펙
이지만 실무에서 사용 X
사용성
이 복잡
해서 어떤 쿼리
가 나가는지 도무지 파악 X
[ QueryDSL ]
![](https://velog.velcdn.com/images%2Fneity16%2Fpost%2F8cc5f88b-622b-4cb6-b7d3-4529a29fccba%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.10.36.png)
- 자세한
QueryDSL
은 뒤에서 다루겠지만 확실히 가시성
과 사용성
이 좋아보임