1. BooleanBuilder
파라미터 값이 null이 아닐때 builder.and()사용한 후 where에 builder 삽입
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();
}
2. Where 다중 파라미터 사용
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond), ageEq(ageCond))
.fetch();
}
//조합 가능(username,age 동시에 체크)
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
return usernameEq(usernameCond).and(ageEq(ageCond));
}
//usernameEq 메서드
private BooleanExpression usernameEq(String usernameCond) {
return usernameCond != null ? member.username.eq(usernameCond) : null;
}
//ageEq 메서드
private BooleanExpression ageEq(Integer ageCond) {
return ageCond != null ? member.age.eq(ageCond) : null;
}
특징
1) where 조건에 null 값은 무시된다
2) 메서드를 다른 쿼리에서도 재활용할 수 있다
3) 쿼리 자체의 가독성이 높아진다
'QueryDSL' 카테고리의 다른 글
[Querydsl] 스프링 데이터 페이징(전체 카운트 따로 조회하기) (0) | 2022.03.25 |
---|---|
[Querydsl] 사용자 정의 리포지토리 (0) | 2022.03.25 |
[Querydsl] @QueryProjection (0) | 2022.03.25 |
[Querydsl] 프로젝션(Projection) (0) | 2022.03.25 |
[Querydsl] 서브쿼리 (from절 서브쿼리 한계) (0) | 2022.03.23 |