Java 如何使用JOOQ模型API从基于字符串的列名添加动态条件?
我正在使用JOOQ模型API动态构建查询。这与所问的问题类似: 但是,我需要这个查询具有基于列名和作为字符串传递的值的动态条件。我从私有getTable()方法知道存储库中的表是什么 我需要一种按名称获取表字段的通用方法Java 如何使用JOOQ模型API从基于字符串的列名添加动态条件?,java,sql,dynamic,conditional-statements,jooq,Java,Sql,Dynamic,Conditional Statements,Jooq,我正在使用JOOQ模型API动态构建查询。这与所问的问题类似: 但是,我需要这个查询具有基于列名和作为字符串传递的值的动态条件。我从私有getTable()方法知道存储库中的表是什么 我需要一种按名称获取表字段的通用方法 query.addConditions(getTable().getTableField(fieldName).like(fieldValue + "%")); 我在生成的表或记录类中找不到执行此操作的任何内容。table类具有我需要使用的TableField静态成员,但无法
query.addConditions(getTable().getTableField(fieldName).like(fieldValue + "%"));
我在生成的表或记录类中找不到执行此操作的任何内容。table类具有我需要使用的TableField静态成员,但无法按名称查找它们。我还缺什么吗
如果不是,我认为有两种做法。我喜欢第一个:
query.addConditions(DSL.condition("? = ?", fieldName,fieldValue));
您正在寻找的方法被调用,因此它出现在JOOQAPI中的所有表表达式上。例如:
query.addConditions(getTable().field(fieldName).like(fieldValue + "%"));
现在,这将无法开箱即用,因为字段
引用的通配符将阻止您将该字段
与字段值+“%”进行比较。您有以下选择:
jOOQ 3.5及以下
非常感谢。通过不同的比较尝试后,我建议使用以下方法:getTable().field(fieldName).convere(String.class).like(DSL.field(““+fieldValue+“%”,String.class)),它可以处理equal、greaterThan和Integer、Double、Date等其他类,非字符串类不需要单引号。请不要这样做:DSL.field(“'”+fieldValue+“%”,string.class)
这将1)防止使用绑定变量,2)那么除了像这样的比较之外,如何处理其他比较?如果你问另一个关于堆栈溢出的问题,我非常乐意回答这个问题。我想这在一个新问题中比在评论中更容易:)
query.addConditions(DSL.condition("? = ?", fieldName,fieldValue));
query.addConditions(getTable().field(fieldName).like(fieldValue + "%"));
getTable().field(fieldName).coerce(String.class).like(fieldValue + "%")
((Field<String>) getTable().field(fieldName)).like(fieldValue + "%")
getTable().field(fieldName, String.class).like(fieldValue + "%")