QueryDSL
QueryDSL์ ์คํ์์ค ํ๋ก์ ํธ์ด๊ณ ๋ค์์ ํ๋ก์ ํธ์์ ์ง์๋๊ณ ์๋ ์ํฉ์ด๋ค ์ด๊ฒ ๋ญ๊ฐ -> jpql์ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ ์ฆ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๋ฐ ๊ธฐ๋ฅ์ด ํนํ๋์ด ์๋ ํ๋ก์ ํธ
์ฌ์ฉ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ์ ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฃผ์ ๋ฐ์์ผ ํจ querydsl-jpa : QueryDSL JPA ๋ผ์ด๋ธ๋ฌ๋ฆฌ querydsl-apt : ์ฟผ๋ฆฌ ํ์ ์ ์์ฑํ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ๊ธฐ์ ๋์จ 2๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์..! ํ์ํ ๋ ๊ตฌ๊ธ๋งํด์ ์ค์นํด ์ฌ์ฉํ์
QueryDSL์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฐ์ ์ ์ผ๋ก JPAQuery ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค ์ด๋ ์ํฐํฐ ๋งค๋์ ๋ฅผ ์์ฑ์์๊ฒ ๋๊ฒจ์ค ๋ค, ๋ค์์ผ๋ก ์ฌ์ฉํ ์ฟผ๋ฆฌ ํ์ ์ ์์ฑํ๋๋ฐ ์์ฑ์์๋ ๋ณ์นญ์ ์ฃผ๋ฉด ๋๊ณ , ์ด ๋ณ์นญ์ jpql์์ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ ์งํํ๋ฉด ๋๋ค
์ฝ๋๋ก ํ๋ฒ ๋ด๋ณด์
๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ญ ์ธํ ์ ์ ์ธํ๊ณ ์ค์ ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ถ๋ถ์ ๋ณด๋ฉด ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์๊ฒ sql๋ฌธ๊ณผ ๋ฎ์์๋ค..!
์ฟผ๋ฆฌ ํ์ (Q) ์ฌ๊ธฐ์๋ QMember๋ก ๋ง๋ค์๋๋ฐ ์๋์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋๋ก ๊ธฐ๋ณธ ์ธ์คํด์ค๋ฅผ ๋ณด๊ดํ๋๊ฒ ์ข๊ธด ํ๋ค ํ์ง๋ง ๊ฐ์ ์ํฐํฐ๋ฅผ ์กฐ์ธํ๊ฑฐ๋ ๊ฐ์ ์ํฐํฐ๋ฅผ ์๋ธ์ฟผ๋ฆฌ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ๋ณ์นญ์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ด๋ด๋๋ ๋ณ์นญ์ ์ง์ ์ง์
๊ฒ์ ์กฐ๊ฑด ์ฟผ๋ฆฌ
where์ ์์ ์กฐ๊ฑด๋ฌธ์ ์์ฑํด์ฃผ๋๋ฐ ์ด ๋ด๋ถ์์๋ and ๋ or์ ๊ฐ์ด ์ ๋ง ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ฏ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
์ด๋ ๊ฒ .and, .or๋ฅผ ์ฌ์ฉํด์ ์กฐ๊ฑด์ ๋ฃ์ ์ ์์ผ๋ฉฐ ์ถ๊ฐ์ ์ผ๋ก where(item.name.eq("์ข์์ํ"), item.price.gt(20000)) ์ด๋ ๊ฒ ์ถ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ํ๋ฉด and๊ฐ ๋จ -> ์ด์ธ์๋ between, contains, startsWith๋ฑ๋ฑ ์ด๋ ๊ฒ ๋ค์ํ๊ฒ ์์ผ๋๊น intellij, ๊ตฌ๊ธ์ ๋์์ ๋ฐ์ผ๋ฉฐ ์ฌ์ฉ
๊ฒฐ๊ณผ ์กฐํ
์ฟผ๋ฆฌ์ ์์ฑ์ด ๋๋๊ณ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ๋๋ฐ ์์ด์ ๋ง์ง๋ง์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋ฉ์๋๋ฅผ ๋ฃ์ด์ค์ผ ํ๋ค ๋ํ์ ์ธ ๋ฉ์๋๋ค
uniqueResult() : ์กฐํ ๊ฒฐ๊ณผ๊ฐ ํ๋์ผ ๋ ์ฌ์ฉํ๊ณ , ๋ง์ฝ ์์ผ๋ฉด null, ๋ง์ฝ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฉด Exception
singleResult() : uniqueResult()์ ๋์ผํ์ง๋ง ๋ง์ฝ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฉด ๋งจ ์์๊ฒ ๋ฆฌํด
list() : ๊ฒฐ๊ณผ๊ฐ ํ๋ ์ด์์ผ ๋ ์ฌ์ฉ
ํ์ด์ง, ์ ๋ ฌ
์ฐ์ ์ ๋ ฌ๊ฐ์ ๊ฒฝ์ฐ๋ orderBy๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ ๋ ฌ ๋ฐฉ์์ ์ง์ ํ๋๋ฐ๋ asc(), desc()์ ์ถ๊ฐ๋ก ์ฌ์ฉ ํ์ด์ง๊ฐ์ ๊ฒฝ์ฐ์๋ offset๋ฉ์๋์ limit๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๊ณ restrict() ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ค๋ ๊ฐ๋ฅํ๋ค- limit, offset ์์ ์ฌ์ฉ ์์๋ฅผ ๋ณด์
์ด์ธ์๋ ์ ๋ ฌlist๋ฅผ ๋ฝ์์ ๋ getTotal, getLimit, getOffset, getResults์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด์ ๊ฒฐ๊ณผ๋ค์ ์ฌ์ฉํ ์ ์๋ค!
๊ทธ๋ฃน
์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ groupBy, having์ ํตํด์ ์ฌ์ฉํ ์ ์๋ค
์กฐ์ธ
์กฐ์ธ์ innerJoin, leftJoin, rightJoin, fullJoin ์ด๋ ๊ฒ ์กด์ฌํ๊ณ ์์ผ๋ฉฐ fetchJoin๋ ์ฌ์ฉ ๊ฐ๋ฅ ์กฐ์ธ์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์์ ์กฐ์ธ ๋์์ ์ง์ ํ๊ณ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์์ ๋ณ์นญ์ผ๋ก ์ฌ์ฉํ ์ฟผ๋ฆฌ ํ์ ์ ์ง์ ์กฐ์ธ์ ์์๋ฅผ ๋ณด์
์๋ธ ์ฟผ๋ฆฌ
์๋ธ ์ฟผ๋ฆฌ๋ ์ฌ์ฉํ๋๋ฐ ์์ด์ JPASubQuery๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ฐ ์์ด์๋ ๊ธฐ์กด๊ณผ ๋น์ทํ๊ฒ unique(), list()๋ฅผ ์ฌ์ฉ ์๋ธ ์ฟผ๋ฆฌ, ๋ค์์ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์์๋ฅผ ๋ณด์
ํ๋ก์ ์
๊ณผ ๊ฒฐ๊ณผ ๋ฐํ
select ์ ์ ์กฐํ ๋์์ ์ง์ ํ๋ ๊ฒ์ ๋ณด๊ณ ํ๋ก์ ์ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋ง์ฝ ๊ฒฐ๊ณผ๋ฅผ ๋ค์์ ์ปฌ๋ผ์ผ๋ก ๋ฐ๊ณ ์ถ๋ค๋ฉด Tuple์ ์ฌ์ฉํด์ ์งํํ ์ ์๋ค ๋ง์ฝ ๊ฒฐ๊ณผ๋ฅผ ์ํฐํฐ๊ฐ ์๋ ๋ค๋ฅธ ํน์ ๊ฐ์ฒด๋ก ๋ฐ๊ณ ์ถ๋ค๋ฉด ๋น ์์ฑ์ ํตํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋๋ฐ ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ๋กํผํฐ ์ ๊ทผ, ํ๋ ์ง์ ์ ๊ทผ, ์์ฑ์ ์ฌ์ฉ ์ด๋ ๊ฒ ๋๋์ด์ ธ ์๋ค ์ถ๊ฐ๋ก ๋ง์ฝ distinct๋ฅผ ๋ถํ๊ณ ์ถ๋ค๋ฉด query.distinct().from(ํ ์ด๋ธ)... ์ด๋ ๊ฒ ์ฌ์ฉ
์์ , ์ญ์ ๋ฐฐ์น ์ฟผ๋ฆฌ
jpql ๋ฐฐ์น ์ฟผ๋ฆฌ์ ๊ฐ์ด ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๋ฌด์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ์ผ๋ก ์ฟผ๋ฆฌํ๋ค๋ ์ ..! ๋์ค์ jpql ๋ฐฐ์น ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฃฌ๋ค..!
๋์ ์ฟผ๋ฆฌ
๋์ ์ฟผ๋ฆฌ๋ BooleanBuilder๋ฅผ ์ฌ์ฉํด์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค
๋ฉ์๋ ์์
๋ฉ์๋ ์์์ ์ฌ์ฉํ๊ฒ๋๋ฉด ์ฟผ๋ฆฌ ํ์ ์ ๊ฒ์ ์กฐ๊ฑด์ ์ง์ ์ ์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค ๊ฒ์ ์กฐ๊ฑด์ ์ด๋ ๊ฒ ์ ์ํ๋ค
์ด๋ ๊ฒ ์ผ๋จ ์ ์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , QueryDelegate์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ํฐํฐ๋ฅผ ์ง์ ํ๊ณ ๊ฑฐ๊ธฐ์ ์ ๋ ธํ ์ด์ ์ผ๋ก ์ ํด์ค๋ค ์ ์ ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ๋์ ์ํฐํฐ์ ์ฟผ๋ฆฌ ํ์ ์ ์ง์ ํ๊ณ ๋๋จธ์ง๋ ํ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์
QueryDSL ์ ๋ฆฌ
๋ฌธ์๊ฐ ์๋ ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋, ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์์ ์ ๋ง ์ข์ ๋ต์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค!! ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ์ ์ปดํ์ผ๋ฌ์ ํ์ธ์ ๋ฐ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ๋ ํ๋ฉด์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ฐ ์์ด์ ide์ ๋์๋ ๋ฐ๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ธฐ์ ์ ์ฉํ๋ค๋ ์๊ฐ์ด ๋ ๋ค
<br
Last updated
Was this helpful?