BooleanBuilder란?

QueryDSL에서 제공하는 클래스로, 동적으로 조건을 구성하고 조합할 수 있는 기능을 제공한다.

BooleanBuilder의 가장 큰 특징은 빌더 패턴을 사용하여 조건을 동적으로 조합할 수 있으며, 최종적으로 BooleanExpression을 반환한다.

주요 메서드

메서드 명 기능
and AND 조건으로 조합한다.
or OR 조건으로 조합한다.
not 부정을 추가한다.
andAnyOf AND ( A OR B )
orAllof OR ( A AND B )
build 내부 조건을 조합하여 BooleanExpression을 반환한다.

andAnyOf(), orAllOf()

Querydsl에서는 or 조건보다 and의 우선순위가 높으며, Java 코드에서 괄호로 묶어도 우선순위가 변하지 않는다.
따라서 and(A or B)와 같은 조건을 처리하려면 andAnyOf()를 사용해야 한다.

1️⃣ 예제 - SQL 변환

SELECT *   
FROM TB_BS_USR 
WHERE  
   1=1
   AND 
      (
	  RESET = 'N' 
	      OR (
		      RESET = 'Y' 
		      AND 
		      MOD_DATE <= #{expiredDateTime,jdbcType=TIMESTAMP}
	      )
	  )

2️⃣ Querydsl로 변환

queryFactory.selectFrom(qUser)  
    .where(new BooleanBuilder()
        .andAnyOf(
            qUser.reset.eq("N").orAllOf(
                qUser.reset.eq("Y"), 
                qUser.modDate.loe(expireDatetime)
            )
        )
    ).fetch();

장점과 단점

✅ 장점

  • SQL의 복잡한 논리 조건을 직관적인 코드로 변환 가능
  • 조건을 동적으로 추가할 수 있어 코드 재사용성이 높음

❌ 단점

  • 구조가 복잡해질 경우 가독성이 떨어질 수 있음
  • Querydsl 전용 기능이므로 JPA 표준이 아님

연결문서

댓글남기기