[英]How to properly build dynamic WHERE clause conditions with JOOQ?
我需要能夠使用String元素列表動態構建JOOQ“ WHERE” close,其中每個元素代表一個文件管理器:
List<String> filerList = new ArrayList<>();
filerList.add("column1=Y");
filerList.add("column2=Z");
所需的最終結果應如下所示:
String sql =
DSL.select(flds)
.from(table(tableName))
.where(conditions)
.getSQL();
我希望能夠將我的filterList轉換為Condition:
Collection<Condition> conditions = new ArrayList<Condition>();
conditions.add((Condition) filerList);
但是此轉換失敗。
將此類過濾器列表轉換為JOOQ的WHERE子句的條件的正確語法是什么?
jOOQ中有很多方法可以編寫您要編寫的動態SQL 。 在您的特定情況下, where(Collection<? extends Condition>)
方法是最合適的。 同樣,您有幾種選擇:
您似乎可以解決使用jOOQ的類型更安全的API,甚至使用代碼生成器的問題,因此構造filterList
的適當方法是:
List<Condition> filterList = new ArrayList<>();
filterList.add(condition("column1=Y"));
filterList.add(condition("column2=Z"));
假定存在以下靜態導入:
import static org.jooq.impl.DSL.*;
您已經使用DSL.table(String)
創建了一個表引用,那么為什么不還使用DSL.field(String, Class)
創建列引用呢?
List<Condition> filterList = new ArrayList<>();
filterList.add(field("column1", String.class).eq(y));
filterList.add(field("column2", Integer.class).eq(z));
當然,如果您將使用代碼生成器,那么它將更加強大和簡單。
您顯然不能將List<String>
轉換為Condition
。 這些類型是完全無關的,並且Java編譯器無法“猜測”您真正的意思是上述類型轉換之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.