동적쿼리가 필요한 상황에서 querydsl을 사용하면 쉽게 해결 가능하다.
BooleanBuilder
BooleanBuilder를 이용해서 조건들을 이어붙여 where 문에 넣어주는 방식이다
and , or 사용
private List<Member> searchMember1(String usernameCond, Integer ageCond) {
BooleanBuilder builder = new BooleanBuilder();
if (usernameCond != null) {
builder.and(member.username.eq(usernameCond));
}
if (ageCond != null) {
builder.and(member.age.eq(ageCond));
}
return queryFactory
.selectFrom(member)
.where(builder)
.fetch();
}
where 다중 파라메터 사용 (BooleanExpression)
BooleanExpression 타입을 리턴하는 매서드를 만들어 조건을 추가하는 방식이다.
매세드로 만들어 사용하기 때문에 어떤 조건인지 명확히 알 수 있고 재사용도 가능하다.
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond),ageEq(ageCond))
.fetch();
}
// 결과가 null 이면 where()에서 무시된다.
private BooleanExpression usernameEq(String usernameCond) {
return usernameCond != null ? member.username.eq(usernameCond) : null;
}
private BooleanExpression ageEq(Integer ageCond) {
return ageCond != null ? member.age.eq(ageCond) : null;
}
참고
https://velog.io/@aidenshin/Querydsl-%EB%8F%99%EC%A0%81-%EC%BF%BC%EB%A6%AC
반응형
'공부 > Spring' 카테고리의 다른 글
[spring] jsoup으로 사이트 크롤링하기 (0) | 2021.09.30 |
---|---|
[querydsl] import static com.querydsl.core.types. does not exist - gradle cache 삭제 (0) | 2021.09.23 |
[spring] Page 1 of 1 containing UNKNOWN instances (0) | 2021.09.06 |
PageRequest - PageableDefault 설정 변경 (0) | 2021.09.06 |
Querydsl like, contains 차이 (0) | 2021.09.06 |