[SPRING] query dsl

CHOI IN HO·2023년 11월 24일
0

SPRING

목록 보기
12/45

QueryDSL이란?

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

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

등장 이전에는 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다.

하지만, QueryDSL의 등장으로 자바코드로 SQL문을 작성할 수 있어 컴파일 시에 오류를 발생하여 잘못된 쿼리가 싱행되는 것을 방지할 수 있다.

아래는 사용예시

QueryDSL 장점

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

QueryDSL 사용법

build.gradle 설정

의존성 추가

implementation 'com.querydsl:querydsl-jpa'
→ QueryDSL 을 사용하기 위한 라이브러리

implementation 'com.querydsl:querydsl-apt'
→ QClass 를 생성하기 위한 라이브러리

annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
→ QueryDSL JPA 의 경우에는 Q 클래스를 활용해서 동작하는데 @Entity 어노테이션을 선언한 클래스를 탐색하고, Q 클래스를 생성한다.

annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'

이클립스 재단으로 자바가 이관되면서 java → jakarta 로 이름이 변경되었다.
Q 파일을 찾지 못해서 발생하는 오류인 java.lang.NoClassDefFoundError (javax.annotation.Entity / javax.annotation.Generated) 에러 발생 대응을 위한 코드 이다.

profile
개발자기 되기 위해선 무엇이든!

0개의 댓글