我需要能够动态构建JOOQ" WHERE" close,使用String元素列表,其中每个元素代表一个文件管理器:
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子句的条件的正确语法是什么?
答案 0 :(得分:2)
jOOQ中有很多方法可以编写您尝试编写的dynamic 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编译器不能猜测&#34;你真正的意思是上述类型转换之一。