๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JPA

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 2์ผ์ฐจ - Query Method ํŽ˜์ด์ง• / ์ •๋ ฌ

๐Ÿ“Œ Query Method Paging

โœ”๏ธ Page ์ธํ„ฐํŽ˜์ด์Šค

  • Slice ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค.
  • Slice๋Š” ์ž˜๋ผ์ง„ ์กฐ๊ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค.
  • Page๋Š” Slice๋ฅผ ์ƒ์†ํ•˜๋ฏ€๋กœ ์กฐ๊ฐ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ์ „์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๊นŒ์ง€ ๊ฐ–๊ณ ์žˆ๋‹ค.

โœ”๏ธ Pageable

  • ๊ตฌํ˜„์ฒด๋กœ PageRequest ์‚ฌ์šฉ
  • PageRequest.of(int page, int size, Sort);
  • page: 0๋ถ€ํ„ฐ ์‹œ์ž‘ (0=์ฒซ๋ฒˆ์งธ ํŽ˜์ด์ง€)
  • size: ํŽ˜์ด์ง€ ๋‹น ์š”์†Œ์ˆ˜
  • Sort.by(Order.desc("ํ•„๋“œ"));
  • getContent() ๋ฉ”์„œ๋“œ๋กœ ์‹ค์ œ ๋‚ด๋ถ€์˜ ๊ฐ’ ํ™•์ธ ๊ฐ€๋Šฅ

โœ”๏ธ Slice ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ

  • getNumberOfElements();
  • getSize()
  • hasContent();
  • isFirst();
  • isLast();
  • hasNext();
  • hasPrevious()

`Slice`๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ž˜๋ผ์ง„ ์š”์†Œ์— ๋Œ€ํ•œ ์ •๋ณด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.


โœ”๏ธ JPA ๋„ค์ด๋ฐ ์ฟผ๋ฆฌ์— ํŽ˜์ด์ง• ์ ์šฉ
๋ฆฌํ„ดํƒ€์ž…์€ Page<T> ๋กœ ํ•˜๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Pageable ์„ ๋ฐ›์•„์ค€๋‹ค.

[ User์˜ ์ด๋ฆ„์œผ๋กœ User๋ฅผ ์ฐพ๊ณ  Pageable์˜ ํŽ˜์ด์ง• ์ •๋ณด์— ๋งž๊ฒŒ ๋ฆฌํ„ดํ•œ๋‹ค. ]

Page<User> findUserByName(Pageable pageable, String name);


๐Ÿ“Œ Query Method Sorting

โœ”๏ธ JPA ๋„ค์ด๋ฐ ์ฟผ๋ฆฌ ๊ธฐ๋ฐ˜ ์ •๋ ฌ
OrderByDesc , OrderByAsc

[ Top์„ ์ด์šฉํ•ด ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ , AgeDesc๋กœ ๋‚˜์ด์ˆœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ๋‚˜์ด๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ User๊ฐ€ ์กฐํšŒ๋œ๋‹ค. ]

User findUserTopOrderByAgeDesc();

โœ”๏ธ ๋„ค์ด๋ฐ ๊ธฐ๋ฐ˜ ์ •๋ ฌ ๋‹ค์ค‘ ์กฐ๊ฑด
And, Or์„ ์“ฐ์ง€์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค. (๊ทธ๋Œ€๋กœ ๋‚˜์—ดํ•œ๋‹ค.)

[ First๋ฅผ ์ด์šฉํ•ด ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ , AgeDesc๋ฅผ ํ†ตํ•ด ๋‚˜์ด ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ๊ฒฐ๊ณผ๋ฅผ NameAsc๋กœ ์ด๋ฆ„ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ User๊ฐ€ ์กฐํšŒ๋œ๋‹ค. ]

User findUserFirstOrderByAgeDescNameAsc();

โœ”๏ธ Sort๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์ •๋ ฌ
Sort๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™” ๊ฐ€๋Šฅํ•˜๋‹ค.

์ •๋ ฌ์—๋Š” ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์˜๋„ํ•œ ๋Œ€๋กœ ์ˆœ์„œ๋ฅผ ๋งž์ถฐ `Order` ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

[ ๋‚˜์ด ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ์ด๋ฆ„ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ]

Sort.by(Order.desc("age"), Order.asc("name"));

๋„ค์ด๋ฐ ์ฟผ๋ฆฌ๋ณด๋‹ค ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ๋” ์ข‹๋‹ค.

์ด์ „ ๋„ค์ด๋ฐ ์ฟผ๋ฆฌ ๊ธฐ๋ฐ˜ ๋‹ค์ค‘ ์กฐ๊ฑด ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•œ `findUserFirstOrderByAgeDescNameAsc` ์™€ ๋™์ผํ•œ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ฟผ๋ฆฌ์ด์ง€๋งŒ ์ด๋ฆ„๋„ ์งง๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Sort๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ๋”์šฑ ๋ช…์‹œ์ ์ด๋‹ค.

[ ๋‚˜์ด ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ์ด๋ฆ„ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ์—์„œ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์กฐํšŒํ•œ๋‹ค. ]    

User findUserFirst(Sort sort);

์‚ฌ์šฉ์˜ˆ์‹œ

User user = userRepository.findUserFirst(Sort.by(Order.desc("age"), Sort.by(Order.asc("name"));

๐Ÿ‘ ์ˆ˜๊ฐ•์ธ์ฆ

 

 

ํŒจ์ŠคํŠธ์บ ํผ์Šค [์ง์žฅ์ธ ์‹ค๋ฌด๊ต์œก]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์˜์ƒํŽธ์ง‘, UX/UI, ๋งˆ์ผ€ํŒ…, ๋ฐ์ดํ„ฐ ๋ถ„์„, ์—‘์…€๊ฐ•์˜, The RED, ๊ตญ๋น„์ง€์›, ๊ธฐ์—…๊ต์œก, ์„œ๋น„์Šค ์ œ๊ณต.

fastcampus.co.kr

 

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.