QueryDSL:将BooleanExpression的列表转换为谓词

Paw*_*ski 3 java querydsl

我正在尝试创建一个取决于布尔参数数量的查询.创建谓词的函数如下所示:

Predicate createPredicate(Boolean param1, Boolean param2) {
    List<BooleanExpression> booleanExpressions = new List<>();        
    if (param1)
        booleanExpressions.add(/** expression 1 **/);
    if (param2)
        booleanExpressions.add(/** expression 2 **/);
    convertExpressionsToPredicate(booleanExpressions);
}
Run Code Online (Sandbox Code Playgroud)

问题是convertExpressionsToPredicate功能.querydsl中是否有任何特殊方法可以使用or运算符将表达式列表连接到一个谓词中?

我正在寻找的解决方案应该转换为:

List<BooleanExpression> booleanExpressions = List(exp1, exp2, exp3);
Run Code Online (Sandbox Code Playgroud)

成:

Predicate p = exp1.or(exp2).or(exp3)
Run Code Online (Sandbox Code Playgroud)

小智 8

要构造复杂的布尔表达式,请使用com.querydsl.core.BooleanBuilder该类.它实现Predicate并可以以级联形式使用.例如:

public List<Customer> getCustomer(String... names) {
    QCustomer customer = QCustomer.customer;
    JPAQuery<Customer> query = queryFactory.selectFrom(customer);
    BooleanBuilder builder = new BooleanBuilder();
    for (String name : names) {
        builder.or(customer.name.eq(name));
    }
    query.where(builder);
    return query.fetch();
}
Run Code Online (Sandbox Code Playgroud)

BooleanBuilder是可变的,最初代表null.每次andor调用后,它代表操作的结果.