반응형
동적쿼리
QueryDSL에서 동적 쿼리를 이용하는 방식에는 BooleanBuilder과 Where 다중 파라미터 사용 방법이 있다.
BooleanBuilder 사용
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();
BooleanBuilder
을 이용하면where절
에 들어갈 값을 미리 생성할 수 있다.- 이 때 동적으로 들어올 파라미터의 유무를 확인하고, 결과적으로
where절
에BooleanBuilder
객체를 입력해 동적 쿼리를 생성한다.
Where 다중 파라미터 사용
queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond), ageEq(ageCond))
.fetch();
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;
}
Where 다중 파라미터 사용 방식
은 where절 내부에,
을 이용해 각 조건을 and 연산 할 수 있는 장점을 이용한다.- where절 내부에
,
으록 구분된BooleanExpression
은QueryDSL
이 자동으로 무시해준다.
- where절 내부에
- 이 때
BooleanExpression
을 이용한다. - Where절을 이용해 동적쿼리를 구성하면 다음과 같이 사용하여 재사용성을 향상시킬 수 있다
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
return usernameEq(usernameCond).and(ageEq(ageCond));
}
- 하지만 위와 같이 여러
BooleanExpression
을 조합한 메서드 사용시null체크
에 주의해야 한다.
반응형
'Java & Kotlin > Spring Data' 카테고리의 다른 글
[QueryDSL] 페이징 연동하기 (0) | 2022.05.15 |
---|---|
[QueryDSL] Spring Data JPA와 QueryDSL 사용하기 (0) | 2022.05.15 |
[QueryDSL] 벌크연산과 SQL Funtion (0) | 2022.05.15 |
[QueryDSL] 프로젝션 (0) | 2022.05.14 |
[QueryDSL] QueryDSL 기본문법 (0) | 2022.05.11 |
[QueryDSL] QueryDSL 시작하기 (0) | 2022.05.10 |