본문 바로가기
Java & Kotlin/Spring Data

[QueryDSL] 동적쿼리

by heekng 2022. 5. 14.
반응형

동적쿼리

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절 내부에 ,으록 구분된 BooleanExpressionQueryDSL이 자동으로 무시해준다.
  • 이 때 BooleanExpression을 이용한다.
  • Where절을 이용해 동적쿼리를 구성하면 다음과 같이 사용하여 재사용성을 향상시킬 수 있다
private BooleanExpression allEq(String usernameCond, Integer ageCond) {
    return usernameEq(usernameCond).and(ageEq(ageCond));
}
  • 하지만 위와 같이 여러 BooleanExpression을 조합한 메서드 사용시 null체크에 주의해야 한다.
반응형