簡體   English   中英

如何使用JOOQ Model API從基於字符串的列名添加動態條件?

[英]How to use JOOQ Model API to add dynamic Conditions from String based column names?

我正在使用JOOQ Model API動態構建查詢。 它類似於這里要求的內容:

但是,我需要此查詢具有基於我作為字符串傳遞的列名稱和值的動態條件。 我在我的存儲庫中知道該表來自私有getTable()方法。

String fieldName = "my_column";
String fieldValue = "searchTerm";

SelectQuery<Record> query = create.selectQuery();
query.addFrom(getTable());

而不是做這樣的事情......

query.addConditions(BOOK.TITLE.like(fieldValue + "%")); 

我需要一種通用的方法來獲取名稱的表字段...

query.addConditions(getTable().getTableField(fieldName).like(fieldValue + "%"));

我在生成的表或記錄類上找不到任何內容。 表類有我需要使用的TableField靜態成員,但無法按名稱查找它們。 還有其他可用的東西嗎?

如果沒有,我會看到兩個行動方案。 我更喜歡第一個:

  1. 以某種方式自定義生成器以在生成的Table類上創建某種內部查找。

  2. 我可以創建新的TableFieldImpl實例,但是當生成的TableImpl類已經擁有它們時,這似乎是浪費,我需要知道有關表列的所有內容才能正確創建它。

編輯:我認為我想要的可能是DSL.condition() ,它可以采取SQL字符串和綁定參數,或者您可以創建這樣的條件:

query.addConditions(DSL.condition("? = ?", fieldName,fieldValue));

您正在尋找的方法稱為TableLike.field(String) ,因此它存在於jOOQ API中的所有表表達式中。 例如:

query.addConditions(getTable().field(fieldName).like(fieldValue + "%"));

現在,這不會開箱即用,因為Field<?>引用的通配符將阻止您將該FieldfieldValue + "%"進行比較。 你有這些選擇:

jOOQ 3.5及更低

getTable().field(fieldName).coerce(String.class).like(fieldValue + "%")
((Field<String>) getTable().field(fieldName)).like(fieldValue + "%")

jOOQ 3.6

getTable().field(fieldName, String.class).like(fieldValue + "%")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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