java - 返回计算结果为 true 的 QueryDSL BooleanExpression

标签 java null querydsl

说我有 CustomerQueryInfo bean 具有以下属性:

  • 字符串名字
  • 字符串姓氏
  • StatusEnum 状态

  • 我想使用此类型的对象执行“ 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/

    相关文章:

    java - CMU Sphinx 4 - 5 pre alpha 安装指南

    java 密码学 BigInteger - 生成素数 q 来查找素数 P =2q+1,完成 - 现在如何生成并确认原根 g?

    php - 在 mysql 搜索中禁用空值

    elasticsearch - 在Elasticsearch搜索中,GET请求的查询字符串参数和POST请求的 “Query DSL”在功能上是否等效?

    java - Spring Data LDAP 使用 Pageable 可能吗?

    java - 删除 Derby DB 中的所有表

    java - 使用 Grizzly : How do you enable http2 的嵌入式 Java 服务器

    ios - Swift WKWebView 未初始化并导致意外的 nil 错误

    c++ - 什么时候应该对具有依赖空指针常量表达式参数的非限定函数调用进行名称查找?

    java - 设置 Maven 插件以将 QueryDSL 与 MySQL 数据库结合使用