JPA

동적쿼리란? with Querydsl

Junuuu 2022. 9. 7. 00:01
728x90

정적 쿼리란?

어떤 조건 상황에도 변경되지 않는 쿼리문

 

동적 쿼리란?

상황에 따라 다른 문법의 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/

 

Querydsl - 레퍼런스 문서

본 절에서는 SQL 모듈의 쿼라 타입 생성과 쿼리 기능을 설명한다. com.mysema.query.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어

querydsl.com

http://querydsl.com/static/querydsl/latest/reference/html/

 

Querydsl Reference Guide

This copyrighted material is made available to anyone wishing to use, modify, copy, or redistribute it subject to the terms and conditions of the Apache License, Version 2.0.

querydsl.com

https://jaehoney.tistory.com/185

 

Querydsl - 동적 쿼리(Dynamic SQL) 사용하기 !

동적 쿼리란 ? 동적 쿼리란 상황에 따라 다른 문법의 SQL을 적용하는 것을 말한다. 예를 들면 DB에서 값을 조회할 때 조회 조건이 동적으로 바뀌어야 하는 경우가 많다. 이런 상황을 Querydsl을 사용

jaehoney.tistory.com

https://velog.io/@neity16/4-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8%EC%99%80-JPA-%ED%99%9C%EC%9A%A9-4-%EB%8F%99%EC%A0%81-%EC%BF%BC%EB%A6%AC-JPQL-vs-Criteria-vs-QueryDSL

 

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

동적 쿼리?: 같은 기능을 하지만 동적으로 들어오는 파라미터에 의해 조건이 바뀌게 설계되는 쿼리ex) 검색 기능 구현시 값이 없으면 전체 정보, 있으면 맞는 정보를 반환방법순수 JPQLCriteriaQueryDS

velog.io

https://data-make.tistory.com/615

 

[JPA] QueryDSL 정리

| QueryDSL - 쿼리언어를 코드로 작성할 수 있도록 해주는 오픈소스 프로젝트 - 데이터 조회 기능이 특화 Documentation ko-KR ver. || 설정 ㅇ 라이브러리 추가 및 환경설정 (pom.xml) - querydsl-jpa : QueryDS..

data-make.tistory.com