Post

[Querydsl] ์ผ€์ด์Šค(Case)

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

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

case ํ‘œํ˜„์‹์ด๋ž€? SQL์—์„œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌ๋ฌธ. QueryDSL์—์„œ๋„ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.


1. ๊ฐ„๋‹จํ•œ case

1
2
3
4
5
6
7
List<String> results = queryFactory
    .select(member.age
        .when(10).then("10๋Œ€")
        .when(20).then("20๋Œ€")
        .otherwise("๊ธฐํƒ€"))   // ๊ทธ ์™ธ
    .from(member)
    .fetch();

๊ฐ’์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•  ๋•Œ ์“ฐ๋Š” ๋ฐฉ์‹์ด๋‹ค.

2. ๋ณต์žกํ•œ case (CaseBuilder)

๋ฒ”์œ„ ์กฐ๊ฑด์€ CaseBuilder๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

1
2
3
4
5
6
7
8
List<String> results = queryFactory
    .select(new CaseBuilder()
        .when(member.age.lt(20)).then("10๋Œ€ ๋ฏธ๋งŒ")
        .when(member.age.between(20, 29)).then("20๋Œ€")
        .when(member.age.between(30, 39)).then("30๋Œ€")
        .otherwise("๊ธฐํƒ€"))
    .from(member)
    .fetch();
๋ฐฉ์‹์šฉ๋„
.when(๊ฐ’).then()์ •ํ™• ์ผ์น˜
new CaseBuilder().when(์กฐ๊ฑด)๋ฒ”์œ„ยท๋ณต์žก ์กฐ๊ฑด

3. ๋™์  ์ฟผ๋ฆฌ (BooleanBuilder)

์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ์กฐ๋ฆฝํ•œ๋‹ค.

1
2
3
4
5
6
7
8
BooleanBuilder builder = new BooleanBuilder();
if (condition1) builder.and(member.age.gt(20));
if (condition2) builder.and(member.name.like("ํ™๊ธธ๋™%"));

List<Member> results = queryFactory
    .selectFrom(member)
    .where(builder)   // ๋™์  ์กฐ๊ฑด
    .fetch();

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
QueryDSL case
โ”œโ”€ ๊ฐ„๋‹จ   .when(๊ฐ’).then().otherwise()
โ”œโ”€ ๋ณต์žก   new CaseBuilder().when(์กฐ๊ฑด)
โ””โ”€ ๋™์    BooleanBuilder๋กœ ์กฐ๊ฑด ์กฐ๋ฆฝ
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
case์กฐ๊ฑด๋ณ„ ๊ฐ’ ๋ฐ˜ํ™˜
CaseBuilder๋ฒ”์œ„ยท๋ณต์žก ์กฐ๊ฑด ์ฒ˜๋ฆฌ
BooleanBuilder๋™์  ์กฐ๊ฑด ์กฐ๋ฆฝ

case๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ’์„ ๋ฐ”๊ฟ€ ๋•Œ, BooleanBuilder๋Š” ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์“ด๋‹ค. ๋‹ค๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋‹ˆ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์ž.

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

Comments powered by Disqus.