ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Querydsl - 설정 및 검증
    Spring/Querydsl 2022. 3. 22. 12:42
    728x90
    반응형

     

     

     

     

    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
    반응형

    댓글

Designed by Tistory.