-
Querydsl - 설정 및 검증Spring/Querydsl 2022. 3. 22. 12:42728x90반응형
Querydsl 설정 및 검증
Querydsl 설정
Querydsl을 사용하기 위해서는 Spring Initializr 에서 해당 라이브러리를 추가하지 못하므로 따로 추가해줘야 한다.
build.gradle
buildscript { ext { queryDslVersion = "5.0.0" // (1) } } plugins { //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" // (2) } dependencies { //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // (3) annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" // (4) } //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" // (5) querydsl { // (6) jpa = true querydslSourcesDir = querydslDir } sourceSets { // (7) main.java.srcDir querydslDir } configurations { // (8) querydsl.extendsFrom compileClasspath } compileQuerydsl { // (9) options.annotationProcessorPath = configurations.querydsl } //querydsl 추가 끝
querydsl관련 설정들만 작성한 것이므로 각 위치에 추가하면 된다.
- (1) querydsl의 버전
- (2) querydsl 플러그인 추가
- (3), (4) 라이브러리 dependency를 추가 및 버전 명시
- (5) querydsl 에서 사용할 경로를 선언
- (6) querydsl 설정을 추가, JPA 사용 여부와 사용할 경로를 지정
- (7) build 시 사용할 sourceSet 추가
- (8) querydsl 이 compileClassPath 를 상속하도록 설정
- (9) querydsl 컴파일시 사용할 옵션을 설정
Querydsl 설정 검증
위에서 설정한 Querydsl이 제대로 작동하는지 확인해보기위해 간단한 Entity를 생성하여 Q 타입이 제대로 생성되는지 확인해보자.
@Entity @Getter @Setter public class Hello { @Id @GeneratedValue private Long id; }
Gradle → Tasks → other → compileQuerydsl 를 실행시키면 설정한 경로에 Q 타입이 생기면 Querydsl가 제대로 작동되고 있다는 것을 알 수 있다.
Querydsl을 검증하기위해 우리는 compileQuerydsl 을 실행시켰었다. 그러면 매번 Q타입을 사용하기위해 Entity 생성 및 수정할때마다 compileQuerydsl 을 실행시켜줘야하는가? 답은 '아니오'이다. Q타입은 컴파일 시점에 compileQuerydsl 가 실행되어 자동으로 생성되므로 번거롭게 직접 compileQuerydsl 을 실행하지 않아도 된다.
Q타입은 컴파일 시점에 자동 생성되므로 버전관리(GIT)에 포함하지 않는 것이 좋다. 앞서 설정에서 생성 위치를 git에 포함하지 않는 폴더인 gradle build 폴더 아래 생성되도록 하였다
Querydsl 테스트
위에서 생성한 Q타입을 이용해 쿼리가 제대로 수행되는지 테스트해보자.
@SpringBootTest @Transactional public class QuerydslTest { @Autowired EntityManager em; @Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); JPAQueryFactory query = new JPAQueryFactory(em); // (1) // QHello qhello = QHello.hello; QHello qHello = new QHello("h"); // (2) Hello result = query // (3) .selectFrom(qHello) .fetchOne(); Assertions.assertThat(result).isEqualTo(hello); } }
- (1) JPAQueryFactory : 쿼리 및 DML 절 생성을 위한 팩토리 클래스
- (2) QHello 객체 생성, 생성자에는 ENtity의 Alias(별칭)로 사용할 변수명을 입력
- (3) Querydsl을 사용하는 이유, 자바 코드로 쿼리를 작성
로그를 보면 해당 쿼리가 잘 작동한 것을 볼 수 있다.
2022-03-22 12:38:30.278 DEBUG 22424 --- [ Test worker] org.hibernate.SQL : select hello0_.id as id1_0_ from hello hello0_
728x90반응형'Spring > Querydsl' 카테고리의 다른 글
Querydsl - where절을 이용한 동적 쿼리 (0) 2022.03.25 Querydsl - BooleanBuilder 이용한 동적 쿼리 (0) 2022.03.25 Querydsl - DTO로 조회하기 (0) 2022.03.25 Querydsl - 프로젝션에 따른 결과 반환 (0) 2022.03.25 Querydsl - Querydsl 기본 문법 (0) 2022.03.23