728x90
반응형
[build.gradle 파일]
1. 최 상단 queryDslVersion 추가 (spring boot 2.6.0 이상일 경우)
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}

2. plugin 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"

3. dependencies 라이브러리 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"

4. 하단 추가코드 - test {useJUnitPlatform()} 하위에 추가
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
queryDsl의 Gradle Build 경로 및 기타 설정들을 추가하는 작업이다.

5. gradle refresh

6. 빌드 성공 확인 (QType 확인)을 위한 엔티티 생성
package study.querydsl.entity;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter @Setter
public class Hello {
@Id @GeneratedValue
private Long id;
}
7. queryDSL 빌드 관련 프로세싱
1) Gradle - Tasks - other - compileQuerydsl 더블클릭


2) 우측 project의 build - generated - querydls - study - querydsl - entity - QHello 확인

QHello는 queryDSL이 Hello엔티티를 대상으로 생성한 파일이다.
(Generated된 Q파일은 깃에 올리지 않는다 - 위에 설정한대로 build폴더에 넣었때는 깃에 올라가지 않는다^^)

메이븐일 경우 Lifecycle 탭에서 clean - install - compile 과정을 거쳐야 한다.
8. 테스트
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
import study.querydsl.entity.QHello;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
@SpringBootTest
@Transactional
class QuerydslApplicationTests {
// @Autowired //스프링 환경에서 동작 가능
@PersistenceContext //스프링을 포함한 다른 컨테이너의경우 사용
EntityManager em;
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em); //최신 버전에서 권장
// QHello qHello = new QHello("h");
QHello qHello = QHello.hello; // QHello.java에 static으로 선언됨
Hello result = query
.selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(result);
assertThat(result.getId()).isEqualTo(hello.getId());
}
}

728x90
반응형