首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回计算结果为true的QueryDSL BooleanExpression

返回计算结果为true的QueryDSL BooleanExpression
EN

Stack Overflow用户
提问于 2012-09-05 15:43:00
回答 5查看 41.1K关注 0票数 13

假设我有具有以下属性的CustomerQueryInfo bean:

  • 字符串firstName
  • 字符串lastName
  • StatusEnum状态

我想使用这个类型的对象执行"QueryDSL“搜索,该对象将返回客户List<Customer>列表。

如果CustomerQueryInfo的一个字段是null,我不想在搜索中使用它。因此,一个将所有三个null字段都设置为的CustomerQueryInfo对象将返回all

我正在寻找使用QueryDSL执行这样一个搜索的最佳实践。

是这样的吗?

代码语言:javascript
复制
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);
}

然后:

代码语言:javascript
复制
return query.from(customer).where(isFirstNameLike(customerQueryInfo.getFirstName).and(isLastNameLike(customerQueryInfo.getLastName).and(isStatusEq(customerQueryInfo.getStatus))).list;
  1. 如何返回计算为true的BooleanExpression
  2. 如果上述方法不可取,那么建议的最佳做法是什么?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-05 17:51:48

您可以像这样安全地使用空谓词

代码语言:javascript
复制
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;
}

并使用其中的varargs方面

代码语言:javascript
复制
query.from(customer)
     .where(
         isFirstNameLike(customerQueryInfo.getFirstName()),
         isLastNameLike(customerQueryInfo.getLastName()),
         isStatusEq(customerQueryInfo.getStatus()))
     .list(customer);
票数 22
EN

Stack Overflow用户

发布于 2017-10-09 17:25:28

如何返回计算为true的BooleanExpression?

代码语言:javascript
复制
BooleanExpression alwaysTrue = Expressions.asBoolean(true).isTrue();
票数 38
EN

Stack Overflow用户

发布于 2017-05-01 16:27:47

使用java 8和BooleanBuilder,您可以实现这样的优雅方式:

Java 8可选& Lambda

代码语言:javascript
复制
public final class ProductQuery {
    public static BooleanExpression nameEqualTo(String name){
        return ofNullable(name).map(QProduct.product.name::eq).orElse(null);
    }
}

BooleanBuilder

代码语言:javascript
复制
BooleanBuilder where = new BooleanBuilder()
    .and(ProductQuery.nameEqualTo(name));
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12285124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档