Custom DSL
DSL
Jpql
ํด๋์ค๋ฅผ ์์ํ๊ณ ๋๋ง์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๋๋ง์ DSL์ ๋ง๋ค ์ ์์ต๋๋ค.
Jpql
์ Kotlin JDSL์ด ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ณธ DSL ํจ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์ด์ฉํด ๋๋ง์ ํจ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Expression
ํน์ Predicate
๋ฅผ ๊ตฌํํ ๋๋ง์ Model
ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ JpqlSerializer
๋ฅผ ๊ตฌํํ์ฌ Model
์ String์ผ๋ก ๋๋๋งํ๋ ๋ฐฉ๋ฒ์ Kotlin JDSL์๊ฒ ์๋ ค์ค ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋๋ง์ DSL์ jpql()
์ ์ ๋ฌํ๊ธฐ ์ํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ DSL ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ JpqlDsl.Constructor
๋ฅผ companion object๋ก ๊ตฌํํ๋ ๊ฒ์ด๊ณ , ๋ ๋ฒ์งธ๋ DSL ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค.
JpqlDsl.Constructor
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํด๋์ค๋ง ์ ์ธํด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ฟผ๋ฆฌ ์์ฑ ์๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
Jpql Instance
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์์ฑ์ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ฌํ์ฉํ ์ ์์ผ๋ฉฐ ์์กด์ฑ ์ฃผ์ ์ ํ์ฉํ ์ ์์ต๋๋ค.
Serializer
๋๋ง์ Model
์ String์ผ๋ก ๋๋๋งํ๊ธฐ ์ํด JpqlSerializer
๋ฅผ ๊ตฌํํ๊ณ ์ด๋ฅผ RenderContext
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
JpqlSerializer
๋ ๋๋๋ง ๋ก์ง์ ๊ตฌํํ ์ ์๋๋ก JpqlWriter
์ RenderContext
๋ฅผ ์ ๊ณตํฉ๋๋ค. RenderContext
๋ฅผ ํตํด JpqlRenderSerializer
๋ฅผ ์ป์ด ๋์ Model
์ด ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ Model
์ ๋๋๋งํ ์ ์์ต๋๋ค. ๋ RenderContext
๋ฅผ ํตํด JpqlRenderStatement
์ JpqlRenderClause
๋ฅผ ์ป์ด ํ์ฌ ์ด๋ค statement์ clause ์์์ ๋๋๋งํ๊ณ ์๋์ง ์ ์ ์์ต๋๋ค. ์ด๊ฒ๋ค์ ์ด์ฉํด์ ๋๋ง์ Model
์ String์ผ๋ก ๋๋๋งํ ์ ์์ต๋๋ค.
JpqlRenderContext
๋ JpqlSerializer
๊ตฌํ์ฒด๋ฅผ ์ถ๊ฐํ ์ ์๋๋ก registerModule()
๋ฅผ ์ ๊ณตํฉ๋๋ค.
Last updated