[Querydsl] Where ํ๋ผ๋ฏธํฐ
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ QueryDSL๋ก ๋์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ ๋ฐฉ์์ ์ ๋ฆฌํ๋ค. ์กฐ๊ฑด์ ์ํฉ์ ๋ฐ๋ผ ๋ถ์๋ค ๋๋ค ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
| ๋ฐฉ์ | ๋๊ตฌ |
|---|---|
| BooleanBuilder | ์กฐ๊ฑด์ ํ๋์ ๋น๋์ ๋์ |
| Where ๋ค์ค ํ๋ผ๋ฏธํฐ | BooleanExpression ๋ฉ์๋๋ฅผ ๋์ด (null์ด๋ฉด ๋ฌด์) |
1. BooleanBuilder
1
2
3
4
5
6
7
8
9
10
public List<Member> findMembersByCondition(String name, Integer age) {
BooleanBuilder builder = new BooleanBuilder();
if (name != null) builder.and(member.name.eq(name)); // ์์ ๋๋ง ์ถ๊ฐ
if (age != null) builder.and(member.age.eq(age));
return queryFactory
.selectFrom(member)
.where(builder)
.fetch();
}
๐ก
if๋ก ๊ฐ์ด ์์ ๋๋ง ์กฐ๊ฑด์and๋ก ๋์ ํ๋ค.null์ธ ํ๋ผ๋ฏธํฐ๋ ์กฐ๊ฑด์์ ๋น ์ง๋ค.
2. Where ๋ค์ค ํ๋ผ๋ฏธํฐ (๊ถ์ฅ)
where()์ ์ฌ๋ฌ BooleanExpression์ ๋์ดํ๋ฉด null์ธ ๊ฒ์ ์๋์ผ๋ก ๋ฌด์๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
public List<Member> findMembers(String name, Integer age, String teamName) {
return queryFactory
.selectFrom(member)
.where(eqName(name), eqAge(age), eqTeamName(teamName)) // null์ ๋ฌด์๋จ
.fetch();
}
private BooleanExpression eqName(String name) {
return name != null ? member.name.eq(name) : null; // null ๋ฐํ ์ ์กฐ๊ฑด ์ ์ธ
}
private BooleanExpression eqAge(Integer age) {
return age != null ? member.age.eq(age) : null;
}
๐ก ์กฐ๊ฑด์ ๋ฉ์๋๋ก ๋ถ๋ฆฌํ๋ฉด ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
where(A, B, C)๋ A AND B AND C์ด๋ฉฐ, null์ธ ์ธ์๋ ๊ฑด๋๋ด๋ค.
3. ์กฐ๊ฑด ์กฐํฉ
๋ฉ์๋๋ฅผ ์กฐํฉํด ๋ ๋ณต์กํ ์กฐ๊ฑด๋ ๋ง๋ ๋ค.
1
2
3
private BooleanExpression eqNameOrTeamName(String name, String teamName) {
return name != null ? member.name.eq(name) : member.team.name.eq(teamName);
}
๐ ์ ๋ฆฌ
1
2
3
4
QueryDSL ๋์ ์ฟผ๋ฆฌ
โโ BooleanBuilder if๋ก ์กฐ๊ฑด ๋์ (builder.and)
โโ Where ๋ค์ค where(A, B, C) โ null ์๋ ๋ฌด์
โโ ์กฐํฉ ๋ฉ์๋ ๋ถ๋ฆฌ๋ก ์ฌ์ฌ์ฉยท๊ฐ๋
์ฑโ
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| BooleanBuilder | ์กฐ๊ฑด์ ๋์ ํ๋ ๋น๋ |
| BooleanExpression | ์กฐ๊ฑด ํ๋(null์ด๋ฉด ๋ฌด์) |
| Where ๋ค์ค ํ๋ผ๋ฏธํฐ | ์กฐ๊ฑด ๋ฉ์๋๋ฅผ ๋์ด |
๋์ ์ฟผ๋ฆฌ๋ QueryDSL์ ๊ฐ๋ ฅํ ์ฅ์ ์ด๋ค. ํนํ Where ๋ค์ค ํ๋ผ๋ฏธํฐ ๋ฐฉ์์ ์กฐ๊ฑด์ ๋ฉ์๋๋ก ๋ถ๋ฆฌํด ์ฌ์ฌ์ฉยท๊ฐ๋
์ฑ์ด ์ข์, BooleanBuilder๋ณด๋ค ์ค๋ฌด์์ ์ ํธ๋๋ค.
Comments powered by Disqus.