[英]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靜態成員,但無法按名稱查找它們。 還有其他可用的東西嗎?
如果沒有,我會看到兩個行動方案。 我更喜歡第一個:
以某種方式自定義生成器以在生成的Table類上創建某種內部查找。
我可以創建新的TableFieldImpl實例,但是當生成的TableImpl類已經擁有它們時,這似乎是浪費,我需要知道有關表列的所有內容才能正確創建它。
編輯:我認為我想要的可能是DSL.condition() ,它可以采取SQL字符串和綁定參數,或者您可以創建這樣的條件:
query.addConditions(DSL.condition("? = ?", fieldName,fieldValue));
您正在尋找的方法稱為TableLike.field(String)
,因此它存在於jOOQ API中的所有表表達式中。 例如:
query.addConditions(getTable().field(fieldName).like(fieldValue + "%"));
現在,這不會開箱即用,因為Field<?>
引用的通配符將阻止您將該Field
與fieldValue + "%"
進行比較。 你有這些選擇:
getTable().field(fieldName).coerce(String.class).like(fieldValue + "%")
((Field<String>) getTable().field(fieldName)).like(fieldValue + "%")
getTable().field(fieldName, String.class).like(fieldValue + "%")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.