반응형
스프링 부트 프로젝트 생성
Spring initialzr에서 프로젝트를 생성한다.
- Spring Web, JPA, H2 Database 등 필요한 의존 라이브러리 설정이 필요하다.
- Spring Boot 2.6 ~ 2.7과 3.0은 build.gradle 설정 방법이 다르다.
QueryDSL 설정
스프링 부트 2.6 ~ 2.7에서 build.gradle 설정
// (1) queryDSL 추가
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
// (2) queryDSL 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// (3) queryDSL 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
// (4) queryDSL 추가 : QueryDSL 빌드 옵션
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
// 여기까지
스프링 부트 3.0에서 build.gradle 설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.0'
id 'io.spring.dependency-management' version '1.1.0'
// queryDSL 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 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()
}
// queryDSL 추가 : QueryDSL 빌드 옵션
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
// 여기까지
환경설정 테스트
검증용 엔티티 생성
@Entity
@Getter
@Setter
public class Hello {
@Id
@GeneratedValue
private Long id;
}
스프링 부트 JPA, 검증 등의 어노테이션 패키지 참고사항
- 스프링 부트 2.X는 javax 예) javax.persistence.Entity
- 스프링 부트 3.0 이상은 jakarta 예) jakarta.persistence.Entity
검증용 Q 타입 생성
다음과 같이 인텔리제이 IDE에서 Q 타입 생성할 수 있다.
- Gradle → Tasks → build → clean
- Gradle → Tasks → other → complieQuerydsl
Q 타입 생성 확인
프로젝트에 생성된 build 패키지 내부에 지정한 경로로 Q 타입이 생성되면 성공
/**
* QHello is a Querydsl query type for Hello
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QHello extends EntityPathBase<Hello> {
private static final long serialVersionUID = 1910216155L;
public static final QHello hello = new QHello("hello");
public final NumberPath<Long> id = createNumber("id", Long.class);
public QHello(String variable) {
super(Hello.class, forVariable(variable));
}
public QHello(Path<? extends Hello> path) {
super(path.getType(), path.getMetadata());
}
public QHello(PathMetadata metadata) {
super(Hello.class, metadata);
}
}
반응형
'프레임워크(Framework) > JPA' 카테고리의 다른 글
[JPA] 엔티티(Entity) 기본 생성자 사용 이유 - Reflection API (0) | 2023.01.14 |
---|---|
[JPA] QueryDSL과 JPQL 비교 (0) | 2023.01.12 |
[JPA] QueryDSL 소개 및 장점 (2) | 2023.01.08 |
[JPA] JPQL 벌크 연산 - 객체지향 쿼리 언어 JPQL (12) (0) | 2022.12.24 |
[JPA] JPQL Named 쿼리(정적 쿼리) - 객체지향 쿼리 언어 JPQL (11) (0) | 2022.12.23 |