티스토리 뷰

반응형

 

 

JPA JPQL 을 사용하던 도중 QueryDSL 로 쿼리를 짜보고 싶어 셋팅해봄.

SPRING DATA JPA 레퍼런스에 queryDSL이 언급은 되는데 설정하는 방법 같은 건 딱히 없어서

블로그들 참고하여 com.ewerk.gradle.plugins.querydsl 플러그인 방식으로 셋팅해봄.

 

* gradle 버전차이 인지는 모르겠는데  annotationProcessor 방식으론 이클립스에서 정상 동작 하지 않음.

먼저 build.gradle에 셋팅을 해줘야 한다.

내 현재 프로젝트 build.gradle은 아래와 같다.

 

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.5'
	id 'io.spring.dependency-management' version '1.1.0'
    ##  querydsl 플러그인 방식
	id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'com.sample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
def querydslVersion = '5.0.0'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
    ## queryDSL 설정
	querydsl.extendsFrom compileClasspath
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.1.0'
    ## querydsl 디펜던시 추가
	implementation 'com.querydsl:querydsl-jpa:5.0.0'
	implementation 'com.querydsl:querydsl-apt:5.0.0'
    ##
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'org.postgresql:postgresql'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

## 하위 queryDSL 관련 설정
def querydslDir =  "src/main/generated"

querydsl {
	library = "com.querydsl:querydsl-apt"
    jpa = true
    querydslDefault = true
    querydslSourcesDir = querydslDir
}

sourceSets {
	main { 
		java {
			srcDirs = ['src/main/java', querydslDir] 
		}
	}
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

 

 

자 위와 같이 추가했으면 Refresh Gradle Project 를 해주자!

문제가 없다면 querydsl 라이브러리들을 올바르게 가져온다.

이제 Gradle 을 build 한다.

(Gradle Tasks가 안보이시는 분들은 Window - show view - other - gradle 에서 선택!)

 

1) gradle Tasks - build

build - Run gradle Tasks 를 해주면

 

2) build ing...

에러없이 성공적으로 끝났으면 Java Build Path 에서 generated 폴더를 잡아줘야 한다.

 

 

src - main - generated 를 선택해주면 이제 프로젝트 트리에서 해당 폴더가 보이며

Q클래스가 생성된 것을 볼 수 있다.

 

 

 


/**
 * QUser is a Querydsl query type for User
 */
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QUser extends EntityPathBase<User> {

    private static final long serialVersionUID = 1610787958L;

    public static final QUser user = new QUser("user");

    public final NumberPath<Integer> userAge = createNumber("userAge", Integer.class);

    public final StringPath userEmail = createString("userEmail");

    public final StringPath userName = createString("userName");

    public QUser(String variable) {
        super(User.class, forVariable(variable));
    }

    public QUser(Path<? extends User> path) {
        super(path.getType(), path.getMetadata());
    }

    public QUser(PathMetadata metadata) {
        super(User.class, metadata);
    }
}

 

 

이제 queryDSL 구문으로 쿼리를 테스트 해보면 된다!

 

* 나는 Q클래스가 생성되면서 @Generated 어노테이션이 오류 나길래 보니까 import 위치가 약간 잘못 잡히는걸 발견했다.

( querydsl-codegen에 GeneratedAnnotationResolver.class 보니 자바 버전에 따라 다르다고 한다.  근데 왜 틀리게 잡는지요? ㅋㅋㅋ )

* intelliJ 에서는 이런 문제 발생하지 않음. 인텔리제이 쓰세여 ㅋㅋㅋ

import javax.annotation.processing.Generated; // 처음에 자동으로 이렇게 잡혀서 에러남
import javax.annotation.Generated;  // 라이브러리 들어가서 확인해보니 processing 밖에 있어서 변경

 

http://querydsl.com/releases.html

 

Querydsl - Unified Queries for Java

5.0 5.0.0 (22.7.2021) This release of QueryDSL targets Java 8 minimally and comes with various improvements to make QueryDSL ready for the modern Java ecosystem. This version also removes joda-time:joda-time, com.google.guava:guava and com.google.code.find

querydsl.com

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday