Post

[Querydsl] ์ •๋ ฌ(Sort)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” QueryDSL์˜ ์ •๋ ฌ์„ ์ •๋ฆฌํ•œ๋‹ค.

QueryDSL์—์„œ ์ •๋ ฌ์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • orderBy: DB ๋‹จ์—์„œ ์ •๋ ฌ (JPQL ์œ ์‚ฌ)
  • Comparator(sort): ๊ฐ€์ ธ์˜จ ๋’ค ์ž๋ฐ”์—์„œ ์ •๋ ฌ (Java 8 ์ŠคํŠธ๋ฆผ)

1. orderBy โ€” DB ์ •๋ ฌ

1
2
3
4
List<Product> products = queryFactory
    .selectFrom(product)
    .orderBy(product.price.desc(), product.name.asc())   // ๊ฐ€๊ฒฉโ†“, ์ด๋ฆ„โ†‘
    .fetch();

๐Ÿ’ก ์—ฌ๋Ÿฌ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ฝค๋งˆ๋กœ ๋‚˜์—ดํ•˜๋ฉด ์ˆœ์„œ๋Œ€๋กœ ์šฐ์„  ์ ์šฉ๋œ๋‹ค. (๊ฐ€๊ฒฉ ๋‚ด๋ฆผ์ฐจ์ˆœ โ†’ ๊ฐ™์œผ๋ฉด ์ด๋ฆ„ ์˜ค๋ฆ„์ฐจ์ˆœ)

2. Comparator โ€” ์ž๋ฐ” ์ •๋ ฌ

1
2
3
4
5
List<Product> products = queryFactory
    .selectFrom(product).fetch()
    .stream()
    .sorted(Comparator.comparing(Product::getPrice).reversed())   // ๊ฐ€๊ฒฉโ†“
    .collect(Collectors.toList());
๋ฐฉ์‹์ •๋ ฌ ์œ„์น˜ํŠน์ง•
orderByDBํšจ์œจ์  (๊ถŒ์žฅ)
Comparator์ž๋ฐ”(๋ฉ”๋ชจ๋ฆฌ)์œ ์—ฐํ•˜๋‚˜ ์ž์› ์†Œ๋ชจโ†‘

3. ๋‹ค์ค‘ ์ •๋ ฌ

1
.orderBy(product.category.asc(), product.price.desc())   // ์นดํ…Œ๊ณ ๋ฆฌโ†‘, ๊ฐ€๊ฒฉโ†“

๐Ÿ“Œ ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ

๐Ÿ’ก nullsFirst(), nullsLast()๋กœ null ๊ฐ’์˜ ์ •๋ ฌ ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธ Comparator ์ •๋ ฌ์€ DB์—์„œ ๊ฐ€์ ธ์˜จ ์ดํ›„ ์ด๋ค„์ง€๋ฏ€๋กœ, DB ์ •๋ ฌ(orderBy)๋ณด๋‹ค ์ž์› ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค. ๊ฐ€๊ธ‰์  orderBy๋ฅผ ์“ฐ์ž.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
QueryDSL ์ •๋ ฌ
โ”œโ”€ orderBy      DB ์ •๋ ฌ (๊ถŒ์žฅ), ๋‹ค์ค‘ ๊ธฐ์ค€ ๋‚˜์—ด
โ”œโ”€ Comparator   ์ž๋ฐ” ์ •๋ ฌ (์œ ์—ฐ, ์ž์›โ†‘)
โ””โ”€ null ์ฒ˜๋ฆฌ    nullsFirst() / nullsLast()
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
orderByDB์—์„œ ์ •๋ ฌ
Comparator์ž๋ฐ”์—์„œ ์ •๋ ฌ
๋‹ค์ค‘ ์ •๋ ฌ์—ฌ๋Ÿฌ ๊ธฐ์ค€ ์ˆœ์„œ๋Œ€๋กœ

์ •๋ ฌ์€ ๊ฐ€๊ธ‰์  orderBy(DB)๋ฅผ ์“ฐ๋Š” ๊ฒŒ ํšจ์œจ์ ์ด๋‹ค. ์ž๋ฐ” Comparator๋Š” ์œ ์—ฐํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •๋ ฌํ•˜๋ฏ€๋กœ ์ž์› ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์ž.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.