querydsl 다중컬럼 in 쿼리 만들기

Minsu Kang·2023년 9월 9일

querydsl 에서 where col1, col2 in ((?, ?), (?, ?)) 과 같이 where in 절에 여러개의 컬럼이 들어가는 쿼리를 만드는 방법 입니다.

public class QuerydslRepository {

    public BooleanExpression booleanExpression(List<Value> values) {
        if (CollectionUtils.isEmpty(values)) {
            return Expressions.FALSE.isTrue(); 
        }
        List<Expression> tuples = new ArrayList<>();
        for (Value value : values) {
            tuples.add(tuple2(value.getColumn1(), value.getColumn2()));
        }
        return tuple2(entity.column1, entity.column2)
            .in(tuples.toArray(new Expression[0]));
    }

    public static SimpleExpression<Object> tuple2(Object ...args) {
        return Expressions.template(Object.class, "(({0}, {1}))", args);
    }
}

where in 절에 들어가는 컬럼 개수가 2개 이상이라면 template 을 컬럼개수에 맞게 변경하면 됩니다.
ex) Expressions.template(Object.class, "(({0}, {1}, {2}))", args)

0개의 댓글