BooleanBuilder 는 QueryDSL에서 제공하는 class 중 하나로, 동적으로 조건을 구성하고 조합할 수 있는 기능을 제공한다.

주요 메서드

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

BooleanBuilder의 특징은 build 반환값이 BooleanExpression이라는 것이다.

andAnyOf(), orAllOf()

Querydsl은 or 조건보다 and의 우선순위가 높고, Java소스에서 괄호로 묶는다고 해도 우선순위가 변하지 않는다. Querydsl을 사용하다보면 and(A or B) 와 같은 조건이 필요할 경우가 있는데 이때, andAnyOf 를 사용한다 간단한 예시를 들어보자

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

복잡한 조건식이 들어있는 이 예시의 형태를 간단히 보면 A and (B or (C and D))의 구조이다. querydsl로 변환해보면

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

이렇게 변환할 수 있다.


연결문서

댓글남기기