From c736566683cd805559178826b1f9e100ab4646bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Mon, 15 Jan 2024 09:53:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20querydsl=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit merge하는 단계로 app 영역에도 추가 하였으나 해당 기능은 data 영역에서만 사용하도록 하는 것을 권장함. --- app/kac-app/build.gradle | 23 ++++++++++++++++++ .../palnet/kac/app/config/QueryDslConfig.java | 20 ++++++++++++++++ .../app/ping/controller/PingController.java | 13 ++++++++++ .../app/ping/controller/QueryRepository.java | 19 +++++++++++++++ build.gradle | 3 +++ data/com/build.gradle | 24 ++++++++++++++++++- .../data/com/DataComApplicationTestApp.java | 10 ++++++++ .../com/service/ComCodeDomainServiceTest.java | 1 + .../code/controller/ComCodeController.java | 2 ++ 9 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/config/QueryDslConfig.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/QueryRepository.java diff --git a/app/kac-app/build.gradle b/app/kac-app/build.gradle index 39f0dc6..b6a0ad0 100644 --- a/app/kac-app/build.gradle +++ b/app/kac-app/build.gradle @@ -9,6 +9,29 @@ dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' implementation "$boot:spring-boot-starter-data-jpa" + implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" + annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + + implementation project(":web-api-com") + // TDOO: 제거... + compileOnly project(":data-com") +} + +// querydsl +def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile + +sourceSets { + main.java.srcDir(querydslDir) +} + +tasks.withType(JavaCompile) { + options.getGeneratedSourceOutputDirectory().set(file(querydslDir)) +} + +clean { + delete file(querydslDir) } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/QueryDslConfig.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/QueryDslConfig.java new file mode 100644 index 0000000..4f75b2b --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/QueryDslConfig.java @@ -0,0 +1,20 @@ +package kr.co.palnet.kac.app.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QueryDslConfig { + + @PersistenceContext + private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } + +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/PingController.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/PingController.java index 8b61891..fdff5ec 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/PingController.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/PingController.java @@ -1,8 +1,14 @@ package kr.co.palnet.kac.app.ping.controller; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Locale; + +@Slf4j @RestController public class PingController { @@ -10,4 +16,11 @@ public class PingController { public String ping() { return "pong"; } + + @GetMapping("/test") + public String test() { + Locale locale = LocaleContextHolder.getLocale(); + log.info(locale.toString()); + return locale.toString(); + } } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/QueryRepository.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/QueryRepository.java new file mode 100644 index 0000000..02d0aab --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/QueryRepository.java @@ -0,0 +1,19 @@ +package kr.co.palnet.kac.app.ping.controller; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import kr.co.palnet.kac.data.com.model.QComArcrftBas; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +@Slf4j +@RequiredArgsConstructor +@Repository +public class QueryRepository { + private final JPAQueryFactory query; + + public void test() { + QComArcrftBas bas = QComArcrftBas.comArcrftBas; + query.select(bas).from(bas).fetch(); + } +} diff --git a/build.gradle b/build.gradle index 68127c8..51830cf 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,9 @@ subprojects { runtimeClasspath { extendsFrom developmentOnly } + compileOnly { + extendsFrom annotationProcessor + } } dependencies { diff --git a/data/com/build.gradle b/data/com/build.gradle index 74caa18..764f250 100644 --- a/data/com/build.gradle +++ b/data/com/build.gradle @@ -1,7 +1,29 @@ dependencies { - implementation("$boot:spring-boot-starter-data-jpa") + implementation "$boot:spring-boot-starter-data-jpa" + +// compileOnly "com.querydsl:querydsl-jpa:5.0.0:jakarta" + implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" + annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + + + testRuntimeOnly("com.h2database:h2") } +def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile + +sourceSets { + main.java.srcDir(querydslDir) +} + +tasks.withType(JavaCompile) { + options.getGeneratedSourceOutputDirectory().set(file(querydslDir)) +} + +clean { + delete file(querydslDir) +} diff --git a/data/com/src/test/java/kr/co/palnet/kac/data/com/DataComApplicationTestApp.java b/data/com/src/test/java/kr/co/palnet/kac/data/com/DataComApplicationTestApp.java index ee9eeb1..205d5a4 100644 --- a/data/com/src/test/java/kr/co/palnet/kac/data/com/DataComApplicationTestApp.java +++ b/data/com/src/test/java/kr/co/palnet/kac/data/com/DataComApplicationTestApp.java @@ -24,4 +24,14 @@ public class DataComApplicationTestApp { public class Config { } +// @Configuration +// public class QueryDslConfig { +// @PersistenceContext +// private EntityManager entityManager; +// +// @Bean +// public JPAQueryFactory jpaQueryFactory() { +// return new JPAQueryFactory(entityManager); +// } +// } } diff --git a/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java b/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java index 0dac903..29a28c0 100644 --- a/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java +++ b/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java @@ -3,6 +3,7 @@ package kr.co.palnet.kac.data.com.service; import kr.co.palnet.kac.data.com.domain.ComCdBas; import kr.co.palnet.kac.data.com.domain.ComCdGroupBas; import kr.co.palnet.kac.data.com.domain.ComCdLangCtg; +import kr.co.palnet.kac.data.com.domain.QComCdBas; import kr.co.palnet.kac.data.com.repository.ComCdBasRepository; import kr.co.palnet.kac.data.com.repository.ComCdGroupBasRepository; import kr.co.palnet.kac.data.com.repository.ComCdLangCtgRepository; diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java index 0ea034f..20eff07 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java @@ -2,6 +2,8 @@ package kr.co.palnet.kac.api.v1.com.code.controller; import java.util.List; +import kr.co.palnet.kac.data.com.domain.ComCdBas; +import kr.co.palnet.kac.data.com.domain.QComCdBas; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping;