인프런 커뮤니티 질문&답변

Jong Hee Park님의 프로필 이미지
Jong Hee Park

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

QueryDSL 소개

스프링부트 2.6.7, java 8, gradle 7.4.X querydsl 설정 방법 공유

작성

·

2K

3

시행착오 끝에 성공해가지고 공유합니다.

(저의 프로젝트 gradle 버전은 7.4대입니다.)

첫번째로 build.gradle 입니다.

의존성에 나머지 부분은 무시하셔도 되고 10번대가 querydsl설정부분입니다.

/* 10-1. querydsl version 정보 추가 */

buildscript {

ext {

queryDslVersion = "5.0.0";

}

}

plugins {

id 'org.springframework.boot' version '2.6.7'

id 'io.spring.dependency-management' version '1.0.11.RELEASE'

id 'java'

id 'war'

/* 10-2. querydsl plugin 추가 */

id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"

}

group = 'com.shop'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = '1.8'

/* 10-3. querydsl */

configurations {

compileOnly {

extendsFrom annotationProcessor

}

}

repositories {

mavenCentral()

}

dependencies {

/* 1. web */

implementation 'org.springframework.boot:spring-boot-starter-web'

testImplementation 'org.springframework.boot:spring-boot-starter-test'

/* 2. 배포시 내장톰캣을 사용하지 않을거라는 dependency */

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

/* 3. lombok */

compileOnly 'org.projectlombok:lombok'

annotationProcessor 'org.projectlombok:lombok'

/* 4. devtools */

runtimeOnly 'org.springframework.boot:spring-boot-devtools'

/* 5. thymeleaf */

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

/* 6. mybatis */

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3'

/* 7. MariaDB */

runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

/* 8. JDBC */

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

/* 9. JPA */

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

/* 10-4. querydsl dependencies 추가 */

implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"

annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"

/* 11. thymeleaf-layout-dialect */

implementation group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect', version: '3.0.0'

/* 12. spring-boot-starter-security */

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security'

/* 13. validation(Bean Validation) */

implementation 'org.springframework.boot:spring-boot-starter-validation'

/* 14. modelmapper */

implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.3.9'

/* 15. thymeleaf-extras-springsecurity5 */

implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5'

/* 16. spring-security-test */

testImplementation group: 'org.springframework.security', name: 'spring-security-test'

}

tasks.named('test') {

useJUnitPlatform()

}

/* 10-5. querydsl에서 사용할 경로 지정*/

def querydslDir = "src/main/generated"

/* 10-6. JPA사용 여부와 사용할 경로를 지정*/

querydsl {

jpa = true

querydslSourcesDir = querydslDir

}

/* 10-7. build시 사용할 SourceSet 추가 */

sourceSets {

main.java.srcDir querydslDir

}

/* 10-8. querydsl이 complieClasspath를 상속하도록 설정 */

configurations {

querydsl.extendsFrom compileClasspath

}

/* 10-9. querydsl 컴파일시 사용할 옵션 설정 */

compileQuerydsl {

options.annotationProcessorPath = configurations.querydsl

}

-> build.gradle에 이렇게 적구요.

-> 프로젝트 우클릭 gradle -> represh gradle project를 한번 해주고 진행합니다.

두번째

-> gradle task -> build -> classes를 실행

-> src/main 하위에 generated라는 폴더가 생기고 그 하위에 Q파일이 생긴걸 볼 수 있다.

-> 하지만 추가로 더 해줘야 할 작업이 있다. 프로젝트에서 저 경로를 추가해줘야 위에서 사용할 수 있다.

아무 컨트롤러에서 Q파일을 불러올려고하면 찾지를 못한다. 그래서 경로를 추가해줘야한다.

-> 프로젝트 우클릭 -> Build Path -> Configure Build Path 로 들어간다.

-> Java Build Path -> Source 탭에 보면 프로젝트에 우리가 추가한 generated 폴더가 보이지 않는다.

-> Add Folder... 클릭 -> 우리가 만든 generated도 체크를 해주고 확인을 눌르고 Apply하면 프로젝트 위에도 우리가만든 q파일이 들어있는 폴더 generated가 생긴다.

-> 이제 아무 컨트롤러에 들어가서 Q를 치고 자동완성을 해보면 접근할 수 있는걸 볼 수 있고 이제 다음 강의를 들으러 가면된다.

끝.....

이상 스프링부트 2.6.7에서 querydsl 적용 방법이었습니다.

추가로 보통 이것저것 찾아봤는데 java 11버전으로 많이들 하시더라구요 근데 제꺼는 java8도 돌아갑니다

(제가 java8....)

 

 

답변 3

1

감사합니다

서칭중 찾게 되었는데 이대로 하니 되네요

저는 generated 폴더 apply는 안해도 동작했습니다.

감사합니다.

도움이 되었습니다.

1

감사합니다

1

김영한님의 프로필 이미지
김영한
지식공유자

Jong Hee Park님 좋은 공유 감사합니다^^!

Jong Hee Park님의 프로필 이미지
Jong Hee Park

작성한 질문수

질문하기