Web/QueryDSL

[QueryDSL] EP1. QueryDSL 설정

 

 

QueryDSL 사용에 앞서 설정을 해주도록 하겠습니다.

 

기본적으로 QueryDSL은 start.io 에서 dependency를 제공하지 않기 때문에 사용하기 위해서는 직접 설정해주어야 합니다.

 

 

build.gradle 설정

 

plugins

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

 

dependency

//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'

 

 

설정코드

 

plugin과 같이 맞물려서 빌드될때 

 

SourceSets

querydslDir이 있으면 인텔리제이같은 IDE들이 자동으로 소스폴더에 import 해줍니다.

 

configurations

querydsl이 compileClasspath에 집어 넣습니다.

 

compileQuerydsl

annotation processor가 같이 돌면서 Q파일을 생성합니다.

 

설정 코드는 멀티모듈, 싱글모듈 등 여러 환경에 따라 많이 바뀔 수 있습니다.

 

설정 안될시에는 열심히 구글링하기 또는 김영한님 QueryDSL 게시판에 질문하면 좋습니다.

 

//querydsl 추가 시작
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 추가 끝

 

 

 

build.grade 전체 코드

plugins {
	id 'org.springframework.boot' version '2.5.0'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'

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

	id 'java'
}

group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	//querydsl 추가
	implementation 'com.querydsl:querydsl-jpa'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
	useJUnitPlatform()
}

//querydsl 추가 시작
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 추가 끝

 

 

 

 

Q파일 생성

 

QueryDSL은 생성된 엔티티에 대해 QueryDSL 실행을 위한 Q파일을 생성합니다.

Q파일이 정상적으로 생성되는지 확인해봅니다.

 

 

Hello class를 생성합니다.

package study.querydsl.entity;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter
@Setter
public class Hello {

    @Id @GeneratedValue
    private Long id;
}

 

 

 

현재 프로젝트 파일에는 build 폴더가 없습니다.

 

 

 

 

compileQuerydsl을 더블클릭해서 엔티티를 querydsl로 컴파일 합니다.

 

 

프로젝트 폴더에 build/generated 경로에서 Hello 엔티티와 똑같은 경로로 Hello 엔티티의 Q파일이 생성되었습니다.

 

 

build/generated 경로는 build.gradle에서 설정해준 경로입니다.

def querydslDir = "$buildDir/generated/querydsl"

 

 

 

주의점

 

  • Querydsl compile시 생긴 파일들은 git으로 관리하면안됩니다.
    (각 환경의 설정마다 Q파일이 다르게 생성되기 때문입니다.)
  • 인텔리제이에서는 build 폴더를 자동으로 ignore합니다. 그래서 build.gradle에서 경로 설정을 build/generated로 한 것입니다.