흰 스타렉스에서 내가 내리지

[Querydsl] 동적 쿼리 2 - Where 다중 파라미터 사용 본문

JPA

[Querydsl] 동적 쿼리 2 - Where 다중 파라미터 사용

주씨. 2024. 4. 20. 17:35
728x90

# 동적 쿼리를 해결하는 두가지 방식

1. BooleanBuilder

2. Where 다중 파라미터 사용

 

 

BooleanBuilder 도 많이 쓰이지만, 이 방법을 사용하면 훨씬 깔끔해진다.

 

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;
}

 

  • where 조건에 null 값은 무시된다
  • 메서드를 다른 쿼리에서도 재활용할 수 있다
  • 쿼리 자체의 가독성이 높아진다.

 

# 조합가능

private BooleanExpression allEq(String usernameCond, Integer ageCond){
    return usernameEq(usernameCond).and(ageEq(ageCond));
}
  • null 체크는 주의해서 처리할 것