[英]How do I create a Field<T> from a value T in jOOQ, explicitly?
在 jOOQ 中,很容易在表達式中使用綁定變量,例如:
MY_TABLE.COL.eq(1);
MY_TABLE.COL.in(1, 2, 3);
MY_TABLE.COL.between(1).and(10);
以上所有方法都接受T
和Field<T>
類型,例如Field.eq(T)
或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);
如何將那些1
或"xyz"
變成Field<Integer>
或Field<String>
等?
(這是 jOOQ 郵件列表等上非常受歡迎的問題,所以我在這里記錄一下)
接受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()));
因為將所有內容包裝在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);
請注意,還有DSL.inline(T)
來創建“內聯值”或“常量”、“文字”,而不是綁定值。
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.