我需要能够使用 String 元素列表动态构建 JOOQ“WHERE”关闭,其中每个元素代表一个文件管理器:
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转换为条件:
Collection<Condition> conditions = new ArrayList<Condition>();
conditions.add((Condition) filerList);
但是这次转换失败了。
将此类过滤器列表转换为 JOOQ 的 WHERE 子句的条件的正确语法是什么?
最佳答案
jOOQ中有很多方法可以写出dynamic SQL的那种你正在尝试写的。在您的特定情况下, where(Collection<? extends Condition>)
方法是最合适的。同样,您有多种选择:
写"plain 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));
使用代码生成器
当然,如果您使用代码生成器,这会更加强大和简单。
为什么你的 Actor 阵容不起作用
你显然不能转换 List<String>
到 Condition
。这些类型完全不相关,Java 编译器无法“猜测”您真正的意思是上述类型转换之一。
关于java - 如何使用 JOOQ 正确构建动态 WHERE 子句条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48368652/