说我有 CustomerQueryInfo
bean 具有以下属性:
我想使用此类型的对象执行“ QueryDSL ”搜索,该对象将返回客户列表
List<Customer>
.如果
CustomerQueryInfo
的字段之一是 null
,我不想在搜索中使用它。因此一个 CustomerQueryInfo
所有三个对象 字段设置为 null
将返回 所有客户 .我正在寻找使用 QueryDSL 执行此类搜索的最佳实践。
像这样可以吗:
private BooleanExpression isFirstNameLike(String firstName){
if(firstName==null)
return true BooleanExpression somehow;
return QCustomer.customer.firstName.like(firstName);
}
private BooleanExpression isStatutEq(StatusEnum status){
if(status==null)
return true BooleanExpression somehow;
return QCustomer.customer.status.eq(status);
}
然后:
return query.from(customer).where(isFirstNameLike(customerQueryInfo.getFirstName).and(isLastNameLike(customerQueryInfo.getLastName).and(isStatusEq(customerQueryInfo.getStatus))).list;
BooleanExpression
这评估为真的? 最佳答案
您可以像这样安全地使用空谓词
private BooleanExpression isFirstNameLike(String firstName){
return firstName != null ? customer.firstName.like(firstName) : null;
}
private BooleanExpression isStatusEq(StatusEnum status){
return status != null ? customer.status.eq(status) : null;
}
并使用 where 的可变参数方面
query.from(customer)
.where(
isFirstNameLike(customerQueryInfo.getFirstName()),
isLastNameLike(customerQueryInfo.getLastName()),
isStatusEq(customerQueryInfo.getStatus()))
.list(customer);
关于java - 返回计算结果为 true 的 QueryDSL BooleanExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285124/