String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember(usernameParam, ageParam);
private List<Member> searchMember(String usernameCond, Integer ageCond) {
BooleanBuilder builder = new BooleanBuilder();
// BooleanBuilder builder = new BooleanBuilder(member.username.eq(usernameCond));
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();
}
BooleanBuilder 인자로 초기 조건(꼭 지켜야하는 조건) 설정이 가능하다. 조건이 맞으면 AND 쿼리를 생성한다.
import com.querydsl.core.types.dsl.BooleanExpression;
private List<Member> searchMember(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond), ageEq(ageCond))
.fetch();
}
private BooleanExpression usernameEq(String usernameCond) {
if (usernameCond == null) {
return null;
}
return member.username.eq(usernameCond);
}
private BooleanExpression ageEq(Integer ageCond) {
return ageCond != null ? member.age.eq(ageCond) : null;
}
where절에 null일 경우 무시한다.
검색 조건 조립하여 새로운 조건 메서드 생성이 가능 하다.
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
return usernameEq(usernameCond).and(ageEq(ageCond));
}
조건 조립 시 Predicate가 아닌 BooleanExpression 반환값 사용
실행 결과
select member1
from Member member1
where member1.username = ?1
and member1.age = ?2
age가 null 인 경우 실행 결과
select member1
from Member member1
where member1.username = ?1
[SPRING] Querydsl | 스프링 데이터 JPA와 Querydsl (0) | 2021.05.17 |
---|---|
[SPRING] Querydsl | 벌크 연산 (0) | 2021.05.17 |
[SPRING] Querydsl | 프로젝션과 결과 반환 (0) | 2021.05.17 |
[SPRING] Querydsl | 문법(2) 조인연산 (0) | 2021.04.30 |
[SPRING] Querydsl | 기본 문법(1) (0) | 2021.04.30 |
댓글 영역