본문 바로가기
공부/Spring

[QueryDSL] 동적쿼리를 해결해보자

by JERO__ 2022. 8. 26.

동적쿼리를 해결해보자

해결하는 방법은 두 가지 방법이 있다.

  • BooleanBuilder
  • Where 다중 파라미터 사용

하나씩 살펴보자!

1. BooleanBuilder

null이 아닌 경우에만 검증 로직을 적용하고 싶을 때 다음과 같이 적용할 수 있다.

2. Where 다중 파라미터 사용 (실무에서 많이 사용한다!) by 김영한님

이 방법을 사용하면 코드가 한층 깔끔해진다.

아래 코드를 보고 바로 이해할 수 있기 때문이다.

private List<Member> searchMember2(String usernameCond, Integer ageCond) {
	return 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;
}

조합도 가능하다! null 체크는 주의해서 처리해야 한다.

private BooleanExpression allEq(String usernameCond, Integer ageCond) {
	return usernameEq(usernameCond).and(ageEq(ageCond));
}
  • where 조건에 null 값은 무시된다
  • 메서드를 다른 쿼리에서 재활용할 수 있다.
  • 쿼리자체의 가독성이 높아진다.

댓글