【问题标题】:Jooq order by for known number of argumentsJooq 按已知数量的参数排序
【发布时间】:2019-08-15 15:33:33
【问题描述】:

我在我的 Java 应用程序中使用 Jooq。 我从 REST 端点得到一个列列表(基本上可以为零 ,1 2) 通过在它们之间使用 like 来过滤我的数据库。 例如,传入请求包含要搜索的字段和值 f1、f2、f3 的数量。每个字段对应于我的实体中的列。 基本上sql应该是例如:

SELECT * from e WHERE location=some_location AND (f1=v1 OR f2=v2 o f3=v3)

其中 f1,v1,f2,v2,f3,v3 来自 REST reuest。它可以包含任意数量的搜索条件(zeor、f1、v1 或 f1、v1 和 f1、v1、f2、v2 或全部) 如何编写通用 JOOQ 子句来处理这种情况

【问题讨论】:

    标签: java jooq


    【解决方案1】:

    第一步是要意识到每个 jOOQ 查询都是一个dynamic SQL query,因此根据一些输入映射动态生成谓词很简单。假设您有以下数据结构来表示您的字段和值:

    Map<String, Object> parameters = ...;
    

    然后你可以把它翻译成这样的谓词:

    Condition result =
    parameters
        .entrySet()
        .stream()
        .reduce(
            DSL.noCondition(),
            (condition, entry) -> condition.or(
                // Use Table.field() to find columns by name in your generated table
                // This will NPE if your field was not found. Might want to handle that...
                ((Field<Object>) E.field(entry.getKey())).eq(entry.getValue())
            ),
            Condition::or
        );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2018-09-16
      • 2019-08-20
      • 2020-08-14
      相关资源
      最近更新 更多