簡體   English   中英

如何創建字段<t>從jOOQ中的值T,明確地?</t>

[英]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);

以上所有方法都接受TField<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM