在 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);
我有以下两条 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);