미운 오리 새끼의 우아한 개발자되기

[QueryDsl] querydsl 설정 본문

Spring & Spring Boot/Spring Boot

[QueryDsl] querydsl 설정

Serina_Heo 2022. 11. 24. 12:53

build.gradle 에서는 qEntity 가 생성되는 위치 설정 등이 필요하다.

plugins {
	id 'org.springframework.boot' version '2.7.4'
	id 'io.spring.dependency-management' version '1.0.14.RELEASE'
	id 'java'
	id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'kr.co.hist'
version = '0.0.1-SNAPSHOT'
//sourceCompatibility = '17'

repositories {
	mavenCentral()
}

dependencyManagement {
	imports {
		mavenBom('com.amazonaws:aws-xray-recorder-sdk-bom:2.8.0')
	}
}

dependencies {

	// https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core
	implementation 'com.amazonaws:aws-java-sdk-core:1.12.329'
	// https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-cognitoidentity
	implementation 'com.amazonaws:aws-java-sdk-cognitoidentity:1.12.328'
	// https://mvnrepository.com/artifact/software.amazon.awssdk/cognitoidentityprovider
	implementation 'software.amazon.awssdk:cognitoidentityprovider:2.18.4'
	// https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk
	implementation 'com.amazonaws:aws-java-sdk:1.12.329'

	implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
	// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
	implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.0-rc2'
	// https://mvnrepository.com/artifact/org.postgresql/postgresql
	implementation 'org.postgresql:postgresql:42.5.0'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.7.4'
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	// https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
	implementation 'org.springdoc:springdoc-openapi-ui:1.6.12'

	// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis
	implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.7.0'
	// https://mvnrepository.com/artifact/com.querydsl/querydsl-apt
	annotationProcessor 'com.querydsl:querydsl-apt:5.0.0'
	// https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa
	implementation 'com.querydsl:querydsl-jpa:5.0.0'

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

test {
	// useJUnitPlatform()
}

/* querydsl 에서 사용할 경로 지정*/
def querydslDir = 'src/main/generated'

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

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

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

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

compileQuerydsl.doFirst {
	if(file(querydslDir).exists() )
		delete(file(querydslDir))
}

config 파일은 아래와 같다.

package kr.co.hist.saladist.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    public QueryDslConfig() {}

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(this.entityManager);
    }
}​