我需要能够使用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转换为Condition:
Collection<Condition> conditions = new ArrayList<Condition>();
conditions.add((Condition) filerList);
但这次演员失败了。
将这样的过滤器列表转换为JOOQ的WHERE子句的条件的正确语法是什么?
在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));
当然,如果您使用代码生成器,这将更加强大和简单。
你显然不能把qazxsw poi施放到qazxsw poi。这些类型是完全不相关的,Java编译器无法“猜测”您真正的意思是上述类型转换之一。