簡體   English   中英

如何使用JOOQ正確構建動態WHERE子句條件?

[英]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>)方法是最合適的。 同樣,您有幾種選擇:

編寫“普通SQL”條件

您似乎可以解決使用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.

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