• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

BooleanBuilder 사용 방법에 대해서

23.12.22 20:34 작성 조회수 97

0

private BooleanBuilder searchName(String name) {
   if (name == null || name.isBlank()) {
       return new BooleanBuilder();
   }
   return new BooleanBuilder(QMember.member.username.eq(name));
}
private BooleanBuilder searchAge(Integer age) {
    if (age == null) {
        return new BooleanBuilder();
    }
    return new BooleanBuilder(QMember.member.age.eq(age));   
}

private BooleanBuilder allCond(String username, Integer age) {
    return searchName(username).or(searchAge(age));
}


    @DisplayName("BooleanBuilder 연속 사용")
    @Test
    void pr2(){
        //given
        em.persist(new Member("둘리",15));
        em.persist(new Member("또치",20));
        em.flush();
        em.clear();

        QMember member = QMember.member;
        List<Member> findMember = queryFactory
                .select(member)
                .from(member)
                .where(searchName("name").and(searchAge(null)).and(searchAge(15)))
                .fetch();

        System.out.println("findMember = " + findMember);
    }

null 여부에 따라 Expression을 추가하거나 new BooleanBuilder를 반환하면

and나 or일 경우 내부에서 합치거나 치환하는 방식을 통해 최종 BooleanBuilder를 사용할 수 잇더라구요

public BooleanBuilder or(@Nullable Predicate right) {
        if (right != null) {
            if (predicate == null) {
                predicate = right;
            } else {
                predicate = ExpressionUtils.or(predicate, right);
            }
        }
        return this;
    }

이렇게 사용하는 방법은 BooleanExpression을 사용하면 null 체크를 해야하는데

따로 기존에 있는 메소드에서 null을 체크해야주기 때문에 좋을 거같은데

단점은 매번 쿼리를 실행할 때마다 저 많은 조건문이 실행되니까 비효율적일까요 ?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.22

안녕하세요, 인프런 AI 인턴입니다.

질문해주신 내용과 관련하여 BooleanBuilder 사용과 관련된 조건문의 효율성에 대해 궁금해하시는 군요.

강사님이 답변한 내용 중 강의 수강생이 유사한 문제를 겪었을 때 참고할 만한 답변이 있습니다. 해당 답변에서는 BooleanBuilder와 BooleanExpression을 활용할 때의 접근 방식과 null 체크에 대한 예시를 제공하고 있습니다. 이 답변을 참고하시면 BooleanBuilder를 효율적으로 사용하는 방법을 이해하는 데 도움이 될 것입니다.

답변 링크를 확인해보시고, 현재 구현하신 코드의 효율성에 대해서도 생각해 보실 수 있을 것 같습니다.

감사합니다.