본문 바로가기
Spring

[Querydsl] Where 절에 case문 사용

by 루에 2023. 11. 28.
반응형

querydsl에서도 where절에 case문 사용이 가능하다.

아래처럼 사용한다.

보통 동적으로 조건을 나눠 걸어야할 때 사용하기 때문에, 내 경우는 아예 조건문을 생성하는 기능을 따로 구현하도록 했다.

BooleanBuilder 앞뒤에 얼마든지 추가 조건을 붙일 수 있다.

 

BooleanBuilder conditions = new BooleanBuilder();

if (addYn.isSuppCd() && noneNull(this.suppCd, params.getSuppCd())) {
    // 조건이 true일 경우 in절을 조건절에 넣고 false일 경우 1=1 을 넣어 pass 시킨다.
    conditions.and(new CaseBuilder().when(params.getCorpRegNo().eq(this.getCorpRegNo()))
        .then((Predicate)(params.getSuppCd().in(this.suppCd)))
        .otherwise(Expressions.asNumber(1).eq(1)));
}

// 쿼리로 변환되면 아래처럼 된다.
case
  when tb_sales_base.corp_reg_no = ? then tb_sales_base.supp_cd = ?
  else ? = ? end
반응형

댓글