在 jOOQ 中动态创建条件

Creating a condition dynamically in jOOQ

我有以下两条 jOOQ 行,效果很好:

    Formulas f = FORMULAS.as("f");
    Condition condition = x > y ? f.SK.eq(sk) : f.SK.eq(0);

现在,因为我有 100 个 table 需要相同的条件,而且条件比上面的例子复杂得多,所以我想创建一个像这样的方法:

public Condition getCondition(Table table, int x, int y, int sk) {
        Condition condition = // write here a generic condition
        return condition;
}

但我不知道如何将列一般分配给 table。如何解决这个问题?

您可以使用以下内容:

public static Condition makeCondition(Table<?> table, int x, int y, int sk) {
    Field<Integer> skField = table.field("sk", int.class);
    return x > y ? skField.eq(sk) : skField.eq(0);
}

或更详细但类型安全的版本:

public static <R extends Record> Condition makeCondition(
        Table<R> table,
        TableField<R, Integer> skField,
        int x,
        int y,
        int sk) {
    return x > y ? skField.eq(sk) : skField.eq(0);
}

// usage:
var c = makeConditon(FORMULAS, FORMULAS.SK, 1, 2, 3);