1. BooleanBuilder 

파라미터 값이 null이 아닐때 builder.and()사용한 후 where에 builder 삽입 

private List<Member> searchMember1(String usernameCond, Integer ageCond) {

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

 

2. Where 다중 파라미터 사용 

private List<Member> searchMember2(String usernameCond, Integer ageCond) {
      return queryFactory
              .selectFrom(member)
              .where(usernameEq(usernameCond), ageEq(ageCond))
              .fetch();
  }
  
  //조합 가능(username,age 동시에 체크)
  private BooleanExpression allEq(String usernameCond, Integer ageCond) {
      return usernameEq(usernameCond).and(ageEq(ageCond));
}
  
  //usernameEq 메서드 
  private BooleanExpression usernameEq(String usernameCond) {
         return usernameCond != null ? member.username.eq(usernameCond) : null;
  }
  //ageEq 메서드 
  private BooleanExpression ageEq(Integer ageCond) {
      return ageCond != null ? member.age.eq(ageCond) : null;
}

 

특징

1) where 조건에 null 값은 무시된다

2) 메서드를 다른 쿼리에서도 재활용할 수 있다

3) 쿼리 자체의 가독성이 높아진다 

 

 

+ Recent posts