Java 如何使用JOOQ模型API从基于字符串的列名添加动态条件?

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静态成员,但无法

我正在使用JOOQ模型API动态构建查询。这与所问的问题类似:

但是,我需要这个查询具有基于列名和作为字符串传递的值的动态条件。我从私有getTable()方法知道存储库中的表是什么

我需要一种按名称获取表字段的通用方法

query.addConditions(getTable().getTableField(fieldName).like(fieldValue + "%"));
我在生成的表或记录类中找不到执行此操作的任何内容。table类具有我需要使用的TableField静态成员,但无法按名称查找它们。我还缺什么吗

如果不是,我认为有两种做法。我喜欢第一个:

  • 以某种方式自定义生成器,以便在生成的表类上创建某种内部查找

  • 我可以创建新的TableFieldImpl实例,但当生成的TableImpl类已经有了实例时,这似乎是一种浪费,我需要了解有关table列的所有信息才能正确创建它

  • 编辑:我想我想要的可能是可以接受SQL字符串和绑定参数,或者您可以创建如下条件:

    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 + "%")