[QueryDSL] 3. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•(2) (์„œ๋ธŒ์ฟผ๋ฆฌ, ์ƒ์ˆ˜, ๋ฌธ์ž ๋”ํ•˜๊ธฐ)

2022. 10. 11. 13:22ใ†์ธํ”„๋Ÿฐ/์‹ค์ „! QueryDSL

728x90

 

https://hyejin.tistory.com/807

 

[QueryDSL] 3. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•(1) Q-Type, ๊ฒ€์ƒ‰ ์กฐ๊ฑด ์ฟผ๋ฆฌ, ๊ฒฐ๊ณผ ์กฐํšŒ, ์ •๋ ฌ, ํŽ˜์ด์ง•, ์ง‘ํ•ฉ, ์กฐ์ธ(ํŽ˜์น˜ ์กฐ์ธ, on

1๏ธโƒฃ JPQL vs Querydsl ํ…Œ์ŠคํŠธ ๊ธฐ๋ณธ ์ฝ”๋“œ QuerydslBasicTest -> ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๊ณ„์† ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํ•˜๊ธฐ ๊ท€์ฐฎ์œผ๋‹ˆ๊นŒ @BeforeEach ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ๋ฏธ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋”ฉ๋  ๋•Œ member์™€ Team ๋ฐ.

hyejin.tistory.com

 

1๏ธโƒฃ ์„œ๋ธŒ ์ฟผ๋ฆฌ 

: com.querydsl.jpa.JPAExpression ์‚ฌ์šฉ 

 

- ์„œ๋ธŒ ์ฟผ๋ฆฌ eq ์‚ฌ์šฉ 

where ์ ˆ ์•ˆ์— ์„œ๋ธŒ ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋•Œ JPAExpression์€ static import ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

- ์„œ๋ธŒ์ฟผ๋ฆฌ goe ์‚ฌ์šฉ

goe๋Š” ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

 

- ์„œ๋ธŒ์ฟผ๋ฆฌ ์—ฌ๋Ÿฌ ๊ฑด ์ฒ˜๋ฆฌ in ์‚ฌ์šฉ

where ์•ˆ์— in์„ ์‚ฌ์šฉํ•ด์„œ 10์‚ด๋ณด๋‹ค ํฐ ํšŒ์›์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ์ด๋‹ค. 

 

- select ์ ˆ์— subquery

select ์•ˆ์—๋„ ์„œ๋ธŒ  ์ฟผ๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โญ from ์ ˆ์˜ ์„œ๋ธŒ ์ฟผ๋ฆฌ ํ•œ๊ณ„ 

JPA JPQL ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„์ ์œผ๋กœ from ์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ(์ธ๋ผ์ธ๋ทฐ)๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

JPQL์ด ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹น์—ฐํžˆ QueryDSL๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด select ์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์ง€์›ํ•œ๋‹ค. 

-> QueryDSL๋„ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด select  ์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค. 

 

๐Ÿ™‚ from ์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ ํ•ด๊ฒฐ๋ฐฉ์•ˆ 

1. ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ join์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. (๊ทผ๋ฐ ์ด๊ฑด ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ๋„ ์žˆ๊ณ , ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ๋„ ์žˆ๋‹ค.)
2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. 
3. nativeSQL์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

2๏ธโƒฃ Case๋ฌธ

: select,  ์กฐ๊ฑด์ ˆ(where), order by์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ 

 

- ๋‹จ์ˆœํ•œ ์กฐ๊ฑด

 

- ๋ณต์žกํ•œ ์กฐ๊ฑด

-> ๋ณต์žกํ•œ ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ๋Š” CaseBuilder๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ DB์—์„œ ์กฐํšŒํ•˜๋Š”๋ฐ filter ํ•˜๋Š” ๊ฒƒ์€ ๋ณ„๋กœ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ๊ฑด ๊ทธ๋ƒฅ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ filter์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ํ•จ. 

 

 

3๏ธโƒฃ ์ƒ์ˆ˜, ๋ฌธ์ž ๋”ํ•˜๊ธฐ 

: ์ƒ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด Expressions.constant(xxx) ์‚ฌ์šฉ 

 

- ๋ฌธ์ž ๋”ํ•˜๊ธฐ concat 

 

โ— ์ฐธ๊ณ 

member.age.stringValue() ์ด๋ถ€๋ถ„์ด ์ค‘์š”ํ•œ๋ฐ, ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…๋“ค์€ stringValue()๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

-> ์ด ๋ฐฉ๋ฒ•์€ ENUM์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90