JPQL with Kotlin JDSL
Last updated
Last updated
Kotlin JDSL์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Java 8 (ํน์ ๊ทธ ์ด์) ๊ณผ Kotlin 1.7 (๊ทธ ์ด์)์ด ์๊ตฌ๋ฉ๋๋ค.
Kotlin JDSL dependency๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ maven repository๊ฐ ์ถ๊ฐ ๋์ด์ผ ํฉ๋๋ค.
Kotlin JDSL์ release๋ ๋ชจ๋ ์ ์ ๋ก๋ ๋ฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ maven repository๊ฐ ๋น๋ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
Kotlin JDSL์ snapshot์ ๋ชจ๋ OSS snapshot repository์ ์ ๋ก๋ ๋ฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ OSS snapshot repository๊ฐ ๋น๋ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
Kotlin JDSL์ ์คํ์ํค๊ธฐ ์ํด์๋ ๋ค์ dependency๋ค์ด ํ์๋ก ์๊ตฌ๋ฉ๋๋ค.
jpql-dsl: JPQL ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๋ DSL
jpql-render: DSL๋ก ๋ง๋ ์ฟผ๋ฆฌ๋ฅผ String์ผ๋ก ๋ณํ์์ผ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Kotlin JDSL์ DSL๋ก ์์ฑ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํ์ํฌ ์ ์๋ Support dependency๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ JPA ์ ๊ณต์์ ๋ง์ถฐ ๋ค์ dependency๋ค ์ค์์ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
hibernate-support: Hibernate๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
eclipselink-support: EclipseLink๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
spring-batch-support: Spring Batch์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
spring-data-jpa-support: Spring Data Jpa์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
hibernate-reactive-support: Hibernate Reactive์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
javax ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ dependency๋ค ์ค์์ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
hibernate-javax-support: Hibernate๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
eclipselink-javax-support: EclipseLink๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
spring-batch-javax-support: Spring Batch์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
spring-data-jpa-javax-support: Spring Data Jpa์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
hibernate-reactive-javax-support: Hibernate Reactive์ ํจ๊ป ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
์ฟผ๋ฆฌ๋ฅผ ๋ง๋ ๋ค์๋ RenderContext
๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด JpqlRenderContext
๋ก ๋ค์๊ณผ ๊ฐ์ด ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
RenderContext
๋ ์ฟผ๋ฆฌ๋ฅผ String์ผ๋ก ๋๋๋งํ ์ ์๋ ์์๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Kotlin JDSL์ RenderContext
์ default ๊ตฌํ์ฒด๋ก JpqlRenderContext
๋ฅผ ์ ๊ณตํฉ๋๋ค.
JpqlRenderer
๋ RenderContext
๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฅผ String์ผ๋ก ๋๋๋งํฉ๋๋ค. JpqlRenderer
๋ String์ผ๋ก ๋๋๋ง๋ query
์ ์ฟผ๋ฆฌ์ ํฌํจ๋ parameters
๋ฅผ ๊ฐ์ง๊ณ ์๋ JpqlRendered
๋ฅผ ๋ฐํํฉ๋๋ค. JpqlRenderer
๋ ์ํ๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ์ ์์ ํฉ๋๋ค.
RenderContext
๋ฅผ ๋ง๋๋ ๋น์ฉ์ ๋น์ธ๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ๋ง๋ค๊ณ ์ด๋ฅผ ์ฌํ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. RenderContext
๋ immutable ๊ฐ์ฒด๋ก ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ์ ์์ ํฉ๋๋ค.
jpql()
์์ select()
๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ ์ฌํ๊ฒ Kotlin JDSL์ ๋ค๋ฅธ statement๋ฅผ ์ํ ํจ์๋ ์ง์ํฉ๋๋ค: , . ๋ ๋ง์ ์์ ๋ฅผ ๋ณด๊ณ ์ถ์ผ์๋ฉด GitHub์ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ถ๊ฐ๋ก ์ ํตํด ๋ณธ์ธ๋ง์ DSL์ ๋ง๋ค ์๋ ์์ต๋๋ค.
๋ ์ ์คํ ๊ณผ์ ์ ๊ฐ๋ตํ ์ํจ EntityManager
์ extension function๋ค์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์คํํ ์ ์์ต๋๋ค.