[SPRING] Query dsl이란?, 사용 방법

CHOI IN HO·2023년 12월 22일
0

SPRING

목록 보기
29/45
post-thumbnail

Query dsl이란

QueryDSL은 하이버네이트 쿼리 언어(HQL: Hibernate Query Language)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임워크이다.
QueryDSL은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있게 해 준다.

자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다.

QueryDSL이 등장하기 이전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다.
하지만, QueryDSL은 자바 코드로 SQL 문을 작성할 수 있어 컴파일 시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지할 수 있다.

QueryDSL 장점

  • 문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에 문법 오류를 확인할 수 있다.
  • 인텔리제이와 같은 IDE의 자동 완성 기능의 도움을 받을 수 있다.
  • 복잡한 쿼리나 동적 쿼리 작성이 편리하다.
  • 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
  • JPQL문법과 유사한 형태로 작성할 수 있어 쉽게 적응할 수 있다.

사용방법

기본 설정

  1. build.gradle 파일에 추가
// Query DSL 관련 스크립트 및 설정
buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

dependencies { 
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}" 
}

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir}

sourceSets {
    main.java.srcDir querydslDir
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}
  1. 수정 후, gradle reload 실행
  2. Gradle Tasks > other > compileQuerydsl 실행
  3. querydslDir 경로에 Q~ 파일들이 생성되었는지 확인

JPA+querydsl

  • QuerydslRepositorySupport 상속
  • 위 그림과 같이 sql문을 사용해서 메서드 생성

  • 필요한 Repository에서 상속받아서 사용
profile
개발자기 되기 위해선 무엇이든!

0개의 댓글