Query DSL

Query DSL 라이브러리

Query DSL 설정

// queryDsl version 정보 추가
buildscript {
   ext {
      queryDslVersion = "5.0.0"
   }
}

plugins {
   id 'org.springframework.boot' version '2.6.0'
   id 'io.spring.dependency-management' version '1.0.11.RELEASE'
   // 2. querydsl plugins 추가
   id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
   id 'java'
}

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'
   compileOnly 'org.projectlombok:lombok'
   runtimeOnly 'com.h2database:h2'
   // querydsl dependencies 추가
   implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
   implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
   useJUnitPlatform()
}

// querydsl에서 사용할 경로 설정
def querydslDir = "$buildDir/generated/querydsl"

// JPA 사용 여부와 사용할 경로를 설정
querydsl {
   jpa = true
   querydslSourcesDir = querydslDir
}

// build 시 사용할 sourceSet 추가
sourceSets {
   main.java.srcDir querydslDir
}

// querydsl 컴파일시 사용할 옵션 설정
compileQuerydsl{
   options.annotationProcessorPath = configurations.querydsl
}

// querydsl 이 compileClassPath 를 상속하도록 설정
configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
   querydsl.extendsFrom compileClasspath
}

Query DSL 테스트

@SpringBootTest
@Transactional
class QuerydslApplicationTests {

		@PersistenceContext
		EntityManager em;
	
		@Test
		void contextLoads() {
			Hello hello = new Hello();
			em.persist(hello);
	
			JPAQueryFactory query = new JPAQueryFactory(em);
			QHello qHello = QHello.hello;
	
			Hello result = query
					.selectFrom(qHello)
					.fetchOne();
	
			Assertions.assertThat(result).isEqualTo(hello);
			Assertions.assertThat(result.getId()).isEqualTo(hello.getId());
		}
}

Import