개발 일기

SpringBoot 2.5.x , Java11 버전 이상에서 QueryDSL 설정하기 본문

Spring

SpringBoot 2.5.x , Java11 버전 이상에서 QueryDSL 설정하기

dev-jo 2021. 8. 31. 01:21

자바 8 과 기본적인 설정은 아래의 게시글을 확인해주세요

 

https://dev-jo.tistory.com/38?category=947368 

 

SpringBoot 2.5.X 버전 이상에서 QueryDsl 설정하기

이번 포스팅은 간단하게 querydsl 의 돌아가는 내부 설명 없이 설정법만 기록하겠습니다. 스프링부트 gradle querydsl 버전 2.5.2 7.1.1 4.3.1 plugins { id 'org.springframework.boot' version '2.5.2' id 'io.s..

dev-jo.tistory.com

 

이번에 사이드 프로젝트 서버 자바 버전을 8 -> 11로 버전업 하면서

 

QClass 가 생성되지 않는 이슈가 생겼습니다.

 

해결법만 올리겠습니다.

 

기본적인 설정은 위의 링크를 참고 한 후

 

아래의 소스를 변경해주시면 됩니다.

 

QueryDSL 이라고 적혀있는 부분만 확인하시면 됩니다.

 

전체 소스

 

plugins {
    id 'org.springframework.boot' version '2.5.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'java-library' // QueryDSL must have
}

group = 'com.dj.server'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

def querydslVersion = '4.3.1'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {

    //web or spring-starter
    implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4'
    implementation 'org.springframework.boot:spring-boot-starter-mail:2.5.4'
    implementation 'org.springframework.boot:spring-boot-starter-aop:2.5.4'
    developmentOnly 'org.springframework.boot:spring-boot-devtools:2.5.4'


    //security
    implementation 'org.springframework.boot:spring-boot-starter-security:2.5.4'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client:2.5.4'

    //db
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.4'
    implementation 'org.springframework.boot:spring-boot-starter-validation:2.5.4'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.3'

    //redis
    implementation 'org.springframework.boot:spring-boot-starter-data-redis:2.5.4'

    //querydsl
    implementation group: 'com.querydsl', name: 'querydsl-jpa', version: querydslVersion
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion, classifier: 'jpa'
    annotationProcessor 'javax.persistence:javax.persistence-api:2.2'
    annotationProcessor 'javax.annotation:javax.annotation-api:1.3.2'


    //websocket
    implementation 'org.springframework.boot:spring-boot-starter-websocket:2.5.4'
    implementation 'org.webjars:sockjs-client:1.5.1'
    implementation 'org.webjars:stomp-websocket:2.3.4'
    implementation 'org.webjars:webjars-locator-core'
    implementation 'org.webjars:stomp-websocket:2.3.3'
    implementation 'org.webjars:bootstrap:3.3.7'
    implementation 'org.webjars:jquery:3.1.1-1'



    //swagger
    implementation 'io.springfox:springfox-swagger2:2.9.2'
    implementation 'io.springfox:springfox-swagger-ui:2.9.2'

    //lombok
    compileOnly 'org.projectlombok:lombok:1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'

    // auth0 JWT
    implementation 'com.auth0:java-jwt:3.18.1'

    //GSON
    implementation 'com.google.code.gson:gson:2.8.7'

    implementation 'com.h2database:h2:1.4.200'

    //test
    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.5.3'
    testImplementation 'org.springframework.security:spring-security-test:5.5.1'
    testImplementation 'com.h2database:h2:1.4.200'

}

// jar plain 파일 생성안되게
// 참고 https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#packaging-executable.and-plain-archives
jar {
    enabled = false
}

test {
    useJUnitPlatform()
}

 

변경 사항

 

변경 전

annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'

 

변경 후

annotationProcessor 'javax.persistence:javax.persistence-api:2.2'
annotationProcessor 'javax.annotation:javax.annotation-api:1.3.2'

 

해당 라이브러리를 변경해 줍시다.

 


변경 후 부터는 QClass 대신

 

아래와 같이 QuerydslRepositorySupport 를 상속 받아 사용하면 됩니다.

 

public class MemberQueryDSLRepositoryImpl extends QuerydslRepositorySupport implements MemberQueryDSLRepository {

    public MemberQueryDSLRepositoryImpl() {
        super(Member.class);
    }

    @Override
    public Member findByMemberNickName(String nickName) {
        final QMember member = QMember.member;
        return from(member)
                .where(member.memberNickName.eq(nickName))
                .fetchOne();
    }
}