Java 如何创建字段<;T>;从jOOQ中的值T,显式地?
在jOOQ中,在表达式中使用绑定变量很容易,例如:Java 如何创建字段<;T>;从jOOQ中的值T,显式地?,java,sql,jooq,Java,Sql,Jooq,在jOOQ中,在表达式中使用绑定变量很容易,例如: MY_TABLE.COL.eq(1); 我的表COL.in(1,2,3); 我的表列在(1)和(10)之间; 上述所有方法都接受T和Field类型,例如or。但是如果我想把bind变量放在表达式的左侧呢?这些显然不起作用: 1.eq(MY_TABLE.COL); 1.in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3); 1.介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间; 如何
MY_TABLE.COL.eq(1);
我的表COL.in(1,2,3);
我的表列在(1)和(10)之间;
上述所有方法都接受T
和Field
类型,例如or。但是如果我想把bind变量放在表达式的左侧呢?这些显然不起作用:
1.eq(MY_TABLE.COL);
1.in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3);
1.介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间;
如何将那些1
或“xyz”
转换为字段
或字段
等
(这是jOOQ邮件列表等中非常流行的一个问题,所以我在这里记录它)接受
T
的方法只是方便的方法。在幕后,它们都将T
参数封装在
//这个
MY_TABLE.COL.eq(1);
//为了方便起见:
MY_TABLE.COL.eq(val(1));
//或者更确切地说,这一个
MY_TABLE.COL.eq(val(1,MY_TABLE.COL.getDataType());
因为将所有内容包装在val()
中会非常冗长和麻烦,为了方便起见,jOOQ的所有API接受字段也接受T
。如果Java有未标记的联合类型,那么这些方法的参数类型将是T | Field
在极少数情况下,用户需要在val()
中显式包装其绑定值,包括:
- 当绑定值位于表达式的左侧时
- 在不支持此类重载的子句中使用绑定值时,例如在
select()
- 当具有多个重载的函数要求其中一个参数具有
字段
类型时
所以,只要写下:
val(1).eq(MY_TABLE.COL);
val(1).in(MY_TABLE.COL1,MY_TABLE.COL2,MY_TABLE.COL3);
val(1).介于(MY_TABLE.COL1)和(MY_TABLE.COL2)之间;
注意,还需要创建“内联值”,或“常量”、“文本”,而不是绑定值
另见: