동적 쿼리 - Where 다중 파라미터 사용
@Test
public void dynamicQuery_WhereParam() {
String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember2(usernameParam, ageParam);
assertThat(result.size()).isEqualTo(1);
}
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
// .where(usernameEq(usernameCond), ageEq(ageCond))
.where(allEq(usernameCond, 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;
}
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
return usernameEq(usernameCond).and(ageEq(ageCond));
}
where 조건에 null 값은 무시된다.
메서드를 다른 쿼리에서도 재활용 할 수 있다.
쿼리 자체의 가독성이 높아진다.
조합 가능
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
return usernameEq(usernameCond).and(ageEq(ageCond));
}
null 체크는 주의해서 처리해야함
출처 : 김영한 JPA 스프링 데이터 강의
'Querydsl' 카테고리의 다른 글
SQL function 호출하기 (0) | 2022.07.26 |
---|---|
수정, 삭제 벌크 연산 (0) | 2022.07.26 |
동적 쿼리 - BooleanBuilder 사용 (0) | 2022.07.25 |
프로젝션과 결과 반환 - @QueryProjection (0) | 2022.07.25 |
프로젝션과 결과 반환 - DTO 조회 (0) | 2022.07.25 |