: QueryDSL은 오픈소스 프로젝트로 JPQL을 Java 코드로 작성할 수 있도록 하는 라이브러리
JPQL : Java Persistence Query Language
QueryDSL을 사용하는 이유
- 자바 코드로 쿼리를 작성함으로 컴파일 시점에 에러를 잡을 수 있다.
=> 기존 JPQL은 쿼리를 문자열로 작성해야 해서 만약 오타가 있거나 잘못 작성할 경우 런타임 시점에서 에러가 발생하여 실행시키기 전까지는 잘못된 부분을 알 수 없었다.- 복잡한 동적 쿼리를 쉽게 다룰 수 있다.
=> JPQL을 이용해 동적 쿼리를 다루기 위해서는 문자열을 조건에 맞게 조합해서 사용해야 한다. 이는 코드가 복잡해지고 런타임 에러를 발생시키는 치명적인 단점이 있다.- Q클래스, 메서드를 활용하여 복잡한 동적 쿼리를 쉽게 다룰 수 있다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.4'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'test'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// Spring Boot
implementation 'org.springframework.boot:spring-boot-devtools'
// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
useJUnitPlatform()
}
// 빌드 단계 src/main/generated중에 생성된 모든 파일이 제거되도록 하여 다음 빌드를 위한 새로운 시작을 제공
clean {
delete file('src/main/generated')
}
QuerydslConfig는 꼭 필요한 것은 아니지만
- QueryDSL 구성을 중앙화된 방식으로 캡슐화한다.
- JPAQueryFactory 가 필요한 곳 어디에나 주입할 수 있는 재사용 가능한 빈을 만든다.
- EntityManger를 통해 적절하게 주입되고 관리되는지 확인 가능하다.
- 중복을 방지하여 코드를 더 깔끔하고 유지 관리하기 쉽게 만든다.
package site.wellmind.qr.config;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuerydslConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory(){
return new JPAQueryFactory(entityManager);
}
}