[21] Spring - ๋ณต์žกํ•œ ์ฟผ๋ฆฌ QueryDSL๋กœ ๋ฐ”๊พธ๊ธฐ

2024. 11. 22. 09:10ใ†Spring/QueryDSL

728x90

๐Ÿ“๏ธ- github ์ฐธ๊ณ 

https://github.com/kuk1157/spring-plus/commit/bc94468b00c609b9e8b2abeefcb6563077cae77a

 

feat: ๋ ˆ๋ฒจ 3-10 ๋ณต์žกํ•œ ์ฟผ๋ฆฌ QueryDSL ์ ์šฉ · kuk1157/spring-plus@bc94468

kuk1157 committed Nov 20, 2024

github.com

 

 

๐Ÿ““ - ์ „์ฒดํ๋ฆ„

 

์š”๊ตฌ์‚ฌํ•ญ)

- ์ œ๋ชฉ, ๋‹ด๋‹น์ž์˜ ๋‹‰๋„ค์ž„, ์‹œ์ž‘&์ข…๋ฃŒ์ผ(์ƒ์„ฑ์ผ๊ธฐ์ค€) ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๋„๋ก

- ์ œ๋ชฉ๊ณผ ๋‹ด๋‹น์ž์˜ ๋‹‰๋„ค์ž„์€ ๋ถ€๋ถ„์ ์œผ๋กœ ์ผ์น˜ํ•ด๋„ ๊ฒ€์ƒ‰๋˜๋„๋ก

- ์ผ์ •์˜ ์ œ๋ชฉ, ๋‹ด๋‹น์ž์˜ ์ˆ˜, ๋Œ“๊ธ€์˜ ์ˆ˜๋ฅผ ์กฐํšŒ / ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋ฐ˜ํ™˜

 

1) APIํ•œ๊ฐœ ์ƒˆ๋กœ์ƒ์„ฑ

2) ์ œ๋ชฉ, ๋‹‰๋„ค์ž„, ์‹œ์ž‘&์ข…๋ฃŒ์ผ @RequestParam์œผ๋กœ ๋„˜๊ธฐ๊ธฐ
3) ๊ฒ€์ƒ‰ ์„ค์ •๊ณผ ๊ด€๋ จ๋œ ์ƒ˜ํ”Œ ์ฟผ๋ฆฌ๋ฌธ ์ž‘์„ฑํ•ด์„œ ์กฐํšŒ(์ •์ƒ์ ์œผ๋กœ ๊ฒ€์ƒ‰๋˜๋Š”๊ฑฐ ํ™•์ธ์™„๋ฃŒ)
4) ์ด๋ฏธ ๋งŒ๋“ค์–ด๋‘” TodoRepositoryCustom๊ณผ TodoRepositoryImpl์—์„œ ๋ฏธ๋ฆฌ์ž‘์„ฑํ•œ ์ฟผ๋ฆฌ๋ฌธ์„ QueryDSL๋กœ ๋ฐ”๊ฟ€ ์ฟผ๋ฆฌ๋ฉ”์„œ๋“œ๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
5) QueryDSL์—์„œ Projections ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜์‹œํ‚ฌ DTO๋ฅผ ๋”ฐ๋กœ๋งŒ๋“ ๋‹ค
6) DTO์—์„œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ œ๋ชฉ,๋‹ด๋‹น์ž์ˆ˜,๋Œ“๊ธ€์ˆ˜๋งŒ ๋ฐ˜ํ™˜์‹œํ‚จ๋‹ค(id ๊ณ ์œ ๋ฒˆํ˜ธ๋งŒ ์ถ”๊ฐ€๋กœ ๋‹ด์•˜๋‹ค.)
7) ๋ฐ˜ํ™˜ํƒ€์ž…์„ controller, service, custom, impl์— ์ „๋ถ€ dto๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.
8) TodoRepositoryImpl์—์„œ ์ƒ˜ํ”Œ์ฟผ๋ฆฌ๋ฌธ์„ QueryDSL๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

9) QueryDSL๋ณ€๊ฒฝ ์™„๋ฃŒ ํ›„ Postman ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ

 

 

๐Ÿ› ๏ธ - QueryDSL ์ ์šฉ

 

QueryDSL๋กœ ๋ฐ”๊ฟ€ ์ฟผ๋ฆฌ)

- ์ผ์ •ํ…Œ์ด๋ธ”์—์„œ ๋Œ“๊ธ€,๋‹ด๋‹น์žํ…Œ์ด๋ธ”๊ณผ joinํ•ด์„œ ๋‹ด๋‹น์ž์ˆ˜์™€ ๋Œ“๊ธ€์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด๋‹ค.

- WHERE, AND์ ˆ์€ ์š”๊ตฌ์‚ฌํ•ญ์— ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„๋“ค์ด๋‹ค

โ€ป (์ผ์ •์ œ๋ชฉ, ๋‹ด๋‹น์ž์˜ ๋‹‰๋„ค์ž„, ์ผ์ •์ƒ์„ฑ์ผ ์‹œ์ž‘&์ข…๋ฃŒ์ผ๋กœ ๊ฒ€์ƒ‰)

- GROUP BY 1,2๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ๋‹ด๋‹น์ž์ˆ˜์™€, ๋Œ“๊ธ€ ์ˆ˜๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด COUNT()์„ ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ์ปฌ๋Ÿผ๋“ค์„ GROUP BY

- ์ƒ์„ฑ์ผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜์—ฌ ์ •๋ ฌํ•ด์ค€๋‹ค.

- COUNT, JOIN, LIKE, ์„œ๋ธŒ์ฟผ๋ฆฌ, BETWEEN, GROUP BY ์ˆ˜ ๋งŽ์€ ํ•จ์ˆ˜์™€ ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐ€๊ณ  ๋ชจ๋‘ QueryDSL๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.

 

 

1. controller - TodoController

- ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Page ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

- TodoSearch DTO๋ฅผ ๋ฐ˜ํ™˜ํƒ€์ž…์œผ๋กœ ํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

- ๊ฒ€์ƒ‰ ํ•ญ๋ชฉ 4๊ฐœ(์ œ๋ชฉ,๋‹‰๋„ค์ž„, ์‹œ์ž‘์ผ, ์ข…๋ฃŒ์ผ) @RequestParam์œผ๋กœ ๊ฐ’์„ ๋‹ด์•„์ค€๋‹ค.

 

2. DTO - TodoSearch

- ์กฐํšŒํ–ˆ์„๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋“ค๋งŒ ๋‹ด์€ DTOํŒŒ์ผ์ด๋‹ค.

- ์ผ์ • ๊ณ ์œ ๋ฒˆํ˜ธ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์—๋Š” ์—†์—ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ ํ™•์ธ์šฉ์œผ๋กœ ์ž„์˜๋กœ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

 

3. custom - TodoRepositoryCustom

- findTodoWithCommentAndManagerCounts๋กœ ์ฟผ๋ฆฌ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค ๋‹ด์•„์ค€๋‹ค.

- TodoSearch DTO๋ฅผ ๋ฐ˜ํ™˜ํƒ€์ž…์œผ๋กœ ๋‘”๋‹ค.

 

4. Impl - TodoRepositoryImpl

- ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์„œ ์บก์ณ๋ณธ 2๊ฐœ

- ์ „์ฒด ์ฝ”๋“œ ํ™•์ธ

 

 

 

- ์ฟผ๋ฆฌ๋ฌธ์—์„œ ์‚ฌ์šฉํ•  Qํด๋ž˜์Šค ๊ฐ์ฒด ์„ธํŒ… ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ฐ ํ•œ ์ฟผ๋ฆฌ์—์„œ ์ด 4๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด์•ผํ•จ

- ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ผ์ •, ๋Œ“๊ธ€, ๋‹ด๋‹น์ž, ์œ ์ € 4๊ฐœ ๊ฐ์ฒด๋ฅผ ์„ธํŒ…

- String์œผ๋กœ ๋ฐ›์€ start,end(์‹œ์ž‘&์ข…๋ฃŒ์ผ)๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํƒ€์ž…๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๋Š”์ฝ”๋“œ

 

- ์œ„์—์„œ ์ง์ ‘ ์ž‘์„ฑํ–ˆ๋˜ ์ฟผ๋ฆฌ๋ฌธ์„ QueryDSL๋กœ ๋ณ€๊ฒฝํ•œ๊ฒƒ์ด๋‹ค.

1) JPAQuery ์‹ค์ œ์ฟผ๋ฆฌ์˜ ์‹คํ–‰์„ ๋‹ด๋‹น / queryFactory๋Š” QueryDSL ์ฒ˜์Œ ์‚ฌ์šฉํ• ๋•Œ ์„ธํŒ…ํ•˜๋Š” config์ด๋‹ค.

์ฐธ๊ณ  - https://kuk1938.tistory.com/213

 

[18] Spring - QueryDSL ์‚ฌ์šฉ๋ฐฉ๋ฒ•

๐Ÿ“๏ธ github ์ฐธ๊ณ https://github.com/kuk1157/spring-plus/commit/05cae3c4514c95331958ca1f9303da8c52a5985b refactor: ๋ ˆ๋ฒจ 2_8 QueryDSL๋กœ ๋ณ€๊ฒฝ · kuk1157/spring-plus@05cae3c- gradle QueryDsl ์˜์กด์„ฑ ์ถ”๊ฐ€ - JPAQueryFactory bean๋“ฑ๋ก, Custom, Imp

kuk1938.tistory.com

 

2) Projections๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ DTOํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3) Projections.constructor์„ ์‚ฌ์šฉํ•˜์—ฌ TodoSearch ํด๋ž˜์Šค ํŒŒ์ผ์˜ ์ƒ์„ฑ์ž์™€ ์กฐํšŒํ•˜๋ ค๋Š” ์ปฌ๋Ÿผ๋“ค์„ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

-  TodoSearch์—์„œ ๊ณ ์œ ๋ฒˆํ˜ธ,์ œ๋ชฉ,๋Œ“๊ธ€์ˆ˜,๋‹ด๋‹น์ž์ˆ˜์™€ ์ผ์น˜ํ•˜๊ฒŒ 4๊ฐœ๋ฅผ ๋งคํ•‘ํ•˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ๋‹ด๋‹น์ž์ˆ˜์™€ ๋Œ“๊ธ€์ˆ˜๋Š” ์œ„์—์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ด์„œ ํ•ด๋‹น ๊ฐ์ฒด์˜ id(๊ณ ์œ ๋ฒˆํ˜ธ)๋กœ COUNT() ํ•˜๊ณ  ์žˆ๋‹ค.

- ์ƒ˜ํ”Œ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.

 

4) from()์—์„œ๋Š” ์กฐํšŒํ•  ํ…Œ์ด๋ธ”๋ช…(์—”ํ‹ฐํ‹ฐ)์„ ์ž…๋ ฅํ•˜์—ฌ ์กฐํšŒํ•ด์ค€๋‹ค.

 

5) lefJoin์„ ํ™œ์šฉํ•˜์—ฌ ์ฐธ์กฐํ•  ํ…Œ์ด๋ธ”(์—”ํ‹ฐํ‹ฐ)์„ ์ •ํ•˜๊ณ  on()์œผ๋กœ ์ด์–ด์ค„ ์ปฌ๋Ÿผ์„ ์„ธํŒ…ํ•œ๋‹ค.

- comment ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐ, comment์˜ todo_id์™€ todoํ…Œ์ด๋ธ”์˜ id(๊ณ ์œ ๋ฒˆํ˜ธ)๋ฅผ ์ด์–ด์ค€๋‹ค๋Š” ๋œป์ด๋‹ค.(๋Œ“๊ธ€&์ผ์ •)

- manager ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐ, manager์˜ todo_id์™€ todoํ…Œ์ด๋ธ”์˜ id(๊ณ ์œ ๋ฒˆํ˜ธ)๋ฅผ ์ด์–ด์ค€๋‹ค๋Š” ๋œป์ด๋‹ค.(๋‹ด๋‹น์ž&์ผ์ •)

 

6) where()์€ ๊ฒ€์ƒ‰ํ•ด์•ผํ•  ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋„ฃ์–ด์ค€๋‹ค.

- ์ผ์ •์˜ ์ œ๋ชฉ์„ like๊ฒ€์ƒ‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— todo.title.contains(title)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜(title)์™€ ๋ถ€๋ถ„์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ.

 

7) and() ๋‹ด๋‹น์ž์˜ ๋‹‰๋„ค์ž„์„ ์กฐํšŒํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

- todoํ…Œ์ด๋ธ”์˜ user_id๋ฅผ userํ…Œ์ด๋ธ”์˜ id(๊ณ ์œ ๋ฒˆํ˜ธ)๋ฅผ nickname์™€ ๋ถ€๋ถ„์ผ์น˜ํ•˜๋Š” id๋ฅผ ๊ตฌํ•ด์„œ ์„œ๋กœ ๊ฐ™์€์ง€ ๋น„๊ต

- todo.user.id.eq( JPAExpressions.select(user.id) ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด user_id๋ฅผ ํ™•์ธํ•œ๋‹ค๋Š” ๋œป

- from(user) .where(user.nickName.contains(nickName)) userํ…Œ์ด๋ธ”์˜ ๋‹‰๋„ค์ž„์„ like๋ฌธ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ถ€๋ถ„์ผ์น˜ ํ™•์ธ

 

8) ์ƒ์„ฑ์ผ ๊ธฐ์ค€์œผ๋กœ ์‹œ์ž‘์ผ&์ข…๋ฃŒ์ผ BETWEEN ๊ฒ€์ƒ‰

- and(todo.createdAt.between(startDateTime, endDateTime))

- ์œ„์—์„œ ๋‚ ์งœ ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝํ•œ startDateTime, endDateTime๋ฅผ ํ™œ์šฉ

 

9) ์ผ์ • ๊ฐ ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ๋‹ด๋‹น์ž ์ˆ˜์™€ ๋Œ“๊ธ€ ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด GROUP BY ์ง„ํ–‰

-  groupBy(todo.id, todo.title) id(์ผ์ • ๊ณ ์œ ๋ฒˆํ˜ธ)์™€ titile(์ผ์ • ์ œ๋ชฉ)์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”

 

10) ์ƒ์„ฑ์ผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ - ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ Todo๊ฐ€ ๋จผ์ € ์กฐํšŒ๋˜๋„๋ก

- orderBy(todo.createdAt.desc())

 

 

1) fetchCount() - ์ฟผ๋ฆฌ์—์„œ ์ „์ฒด ๊ฑด์ˆ˜๋ฅผ ๊ตฌํ•ด์˜จ๋‹ค.(ํŽ˜์ด์ง•์— ํ™œ์šฉ)
2) offset(pageable.getOffset()) - ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ์‹œ์ž‘ํ•  ํ•ญ๋ชฉ์˜ ์œ„์น˜

3) limit(pageable.getPageSize())  - ํ•œ ํŽ˜์ด์ง€์— ํ‘œ์‹œํ•  ํ•ญ๋ชฉ์˜ ์ˆ˜

4) fetch() - ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

 

5) return new PageImpl<>(results, pageable, total)

- PageImpl์€ Page์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค, ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์™€ ํŽ˜์ด์ง• ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ.

- results : fetch() ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ€์ ธ์˜จ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ TodoSearch ๋ชฉ๋ก

- pageable: ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ํŽ˜์ด์ง• ์ •๋ณด์ž…๋‹ˆ๋‹ค.

- total: ์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

5. Service - TodoService

- Controller์—์„œ ์ƒ์„ฑํ•œ ๊ทธ๋Œ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ณ , ํŽ˜์ด์ง•์„ Pageable ๊ฐ์ฒด๋ฅผ ์ตœ์ƒ๋‹จ์— ๋จผ์ € ์„ธํŒ…ํ•œ๋‹ค.

- ๊ฐ ๊ฒ€์ƒ‰๊ฐ’์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด๋’€๋‹ค. ๊ฐ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ 1๊ฐœ,2๊ฐœ,3๊ฐœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ์žก๊ณ ์‹ถ์ง€๋งŒ ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ์™€ ๋” ๋งŽ์€ if๋ฌธ์ด ์ƒ๊ฒจ์•ผํ•ด์„œ ์ผ๋‹จ null์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋งŒ ์ง„ํ–‰ํ–ˆ๋‹ค.

https://kuk1938.tistory.com/208

 

[15] Spring - JPA-Plus ๊ณผ์ œ ํ•„์ˆ˜๋ ˆ๋ฒจ_1

๐Ÿ“๏ธ ๊ณผ์ œ ์š”๊ตฌ์‚ฌํ•ญ)[๋ ˆ๋ฒจ1]1-1) ์ฝ”๋“œ ๊ฐœ์„  ํ€ด์ฆˆ - @Transactional์˜ ์ดํ•ด- ํ• ์ผ ์ €์žฅ ๊ธฐ๋Šฅ api controller์—์„œ ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ ์žˆ๋‹ค.- ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ •์ƒ์ ์œผ๋กœ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ

kuk1938.tistory.com

โ€ป ํ•ด๋‹น ๊ธ€ ๋งˆ์ง€๋ง‰์— JPQL๊ณผ ๊ฐ™์ด ํ•˜๋ ค๋ฉด ์ฟผ๋ฆฌ๋ฉ”์†Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์™€์•ผํ•œ๋‹ค.

 

- TodoRepositoryCustom, TodoRepositoryImpl์—์„œ ์„ธํŒ…ํ•œ ์ฟผ๋ฆฌ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ TodoSearch DTO์—์„œ ์ตœ์ข…์œผ๋กœ ์กฐํšŒํ•ด์•ผํ•  ๊ฐ’์„ ๋ฐ˜ํ™˜์‹œ์ผœ์ค€๋‹ค.

 

 

 

๐Ÿงช - ์ตœ์ข… ํ…Œ์ŠคํŠธ

 

 

 

- ์ฟผ๋ฆฌ๊ฐ€ ์›Œ๋‚™ ๋ณต์žกํ•ด์„œ 2๊ฐœ๊ฐ€ ํ•œ์ฟผ๋ฆฌ

 

 

 

728x90

'Spring > QueryDSL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[18] Spring - QueryDSL ์‚ฌ์šฉ๋ฐฉ๋ฒ•  (1) 2024.11.20