728x90
build.gradle(Spring Boot 2.x)
1. plugin 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
2. dependencies에 querydsl 라이브러리 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'mysql:mysql-connector-java'
//querydsl
implementation 'org.querydsl:querydsl-jpa'
}
3. querydsl 추가
dependencies {
...
//querydsl
implementation 'org.querydsl:querydsl-jpa'
}
...
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl{
jpa = truequerydslSourcesDir = querydslDir
}
sourceSets{
main.java.srcDir querydslDir
}
configurations{
querydsl.extendsFrom compileClasspath
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝
- 이 설정들은 plugin과 맞물려서 build 될 때 configuration에 querydsl이 compileClasspath를 넣으면서 컴파일이 될 때 annotationProcessor와 함께 Q파일을 생성해 내는 것이라고 한다. Q파일을 생성하기 위한 설정이라고 보면 될 듯하다.
- 그런데 이 설정이 이클립스냐 인텔리제이냐 이런거 버전마다 다를 수 있고 싱글 모듈이냐 멀티 모듈이냐에 따라 다를 수도 있다.
build.gradle(Spring Boot 3.0)
dependencies에 querydsl 라이브러리 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'mysql:mysql-connector-java'
//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"
}
- 3.0부터는 설정 과정이 조금 간편해졌다.
Qtype 생성
- querydsl은 Qtype이라는 것을 먼저 뽑아내고 그걸 이용해서 쿼리를 하기 때문에 그와 관련된 작업이 필요하다.
- Tasks → other
- compileQuerydsl 더블클릭
- 그럼 이렇게 뭔가 했다고 알려준다.
- 2.x버전 까지는 저렇게 하면 Qtype이 생성되었는데 생성되지 않았다. other → compileJava를 더블클릭하니 아래와 같이 Qtype 클래스가 생성되었다.
- 2.x버전에는 어느 경로에 어떤 파일에 생성할건지 전부 지정해 주었는데 3.0부터는 이렇게 자동으로 다 해준다.
- Hello라는 엔티티가 있었는데 QHello가 생성되었다. Entity를 보고 querydsl이 QHello를 생성해 준 것이다. 이걸 이제 코드에서 사용할 수 있다.
- 주의할 점은 이 Qtype클래스를 깃에 올려서 사용하면 안된다. 왜냐하면 시스템이 자동으로 생성해 주는 것이기 때문에 라이브러리 버전이 올라가서 바뀌면 세부적인 내용이 바뀔 수 있기 때문이다. 지금은 build폴더 안에 있어서 ignore처리가 되지만 혹시 다른 곳에 있다면 ingnore처리를 해야 한다.
@Test
void contextLoads(){
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em);
QHello qHello = new QHello("hello");
QHello qhello1 = QHello.hello;
Hello result = query
.selectFrom(qHello)
.fetchOne();
Assertions.assertThat(result).isEqualTo(hello);
Assertions.assertThat(result.getId()).isEqualTo(hello.getId());
}
- 이후 간단하게 쿼리가 날아가는지 테스트를 해 보면
- 이렇게 쿼리가 잘 나가는 것을 볼 수 있다.
- 이거 하면서 알게 되었는데 맥북 기준으로 [command + shift + t] 단축키를 누르면 해당 클래스의 테스트코드 클래스를 생성할 수 있었다.
728x90
'Java > Querydsl' 카테고리의 다른 글
[Querydsl] Spring Data JPA + Querydsl , Pageable(페이징) (0) | 2023.07.09 |
---|---|
[Querydsl] 순수 JPA Repository + Querydsl (0) | 2023.07.09 |
[Querydsl] 프로젝션, 동적 쿼리, 배치 쿼리(벌크 연산) (0) | 2023.07.08 |
[Querydsl] Querydsl 기본문법 (0) | 2023.07.08 |