【发布时间】:2012-08-30 09:22:20
【问题描述】:
假设我有具有以下属性的 CustomerQueryInfo bean:
- 字符串名字
- 字符串姓氏
- StatusEnum 状态
我想使用此类型的对象执行“QueryDSL”搜索,该对象将返回客户列表List<Customer>。
如果CustomerQueryInfo 的字段之一是null,我不想在搜索中使用它。因此,所有三个字段都设置为null 的CustomerQueryInfo 对象将返回所有客户。
我正在寻找使用 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;
- 如何返回评估结果为 true 的
BooleanExpression? - 如果上述方法不可取,那么推荐的最佳做法是什么?
【问题讨论】: