在 jOOQ 中,很容易在表达式中使用绑定变量,例如:
MY_TABLE.COL.eq(1);
MY_TABLE.COL.in(1, 2, 3);
MY_TABLE.COL.between(1).and(10);
Run Code Online (Sandbox Code Playgroud)
以上所有方法都接受T和Field<T>类型,例如Field.eq(T)or Field.eq(Field<T>)。但是如果我想把绑定变量放在表达式的左边怎么办?这些显然不起作用:
1.eq(MY_TABLE.COL);
1.in(MY_TABLE.COL1, MY_TABLE.COL2, MY_TABLE.COL3);
1.between(MY_TABLE.COL1).and(MY_TABLE.COL2);
Run Code Online (Sandbox Code Playgroud)
我怎样才能把这些1or"xyz"变成Field<Integer>orField<String>等等?
(这是 jOOQ 邮件列表等上的一个热门问题,所以我在这里记录)
Luk*_*der 13
接受的方法T只是方便的方法。在幕后,他们都将T论点包裹在DSL.val(T)
// This
MY_TABLE.COL.eq(1);
// Is just convenience for this:
MY_TABLE.COL.eq(val(1));
// Or rather, this one to be precise
MY_TABLE.COL.eq(val(1, MY_TABLE.COL.getDataType()));
Run Code Online (Sandbox Code Playgroud)
因为将所有内容都包装起来val()会非常冗长和繁琐,所以为了方便起见,所有 jOOQ 的 API 接受Field<T>也都接受T。如果 Java 具有未标记的联合类型,则此类方法的参数类型将为T|Field<T>.
在极少数情况下,用户需要将其绑定值显式包装在 中val(),包括:
select()Field<T>其中一个参数的类型时所以,只要写:
val(1).eq(MY_TABLE.COL);
val(1).in(MY_TABLE.COL1, MY_TABLE.COL2, MY_TABLE.COL3);
val(1).between(MY_TABLE.COL1).and(MY_TABLE.COL2);
Run Code Online (Sandbox Code Playgroud)
请注意,还DSL.inline(T)可以创建“内联值”或“常量”、“文字”,而不是绑定值。
也可以看看:
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |