当前位置: 首页 > 知识库问答 >
问题:

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

马高谊
2023-03-14

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

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

String fieldName = "my_column";
String fieldValue = "searchTerm";

SelectQuery<Record> query = create.selectQuery();
query.addFrom(getTable());

而不是做这样的事情。。。

query.addConditions(BOOK.TITLE.like(fieldValue + "%")); 

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

query.addConditions(getTable().getTableField(fieldName).like(fieldValue + "%"));

我在生成的表或记录类中找不到执行此操作的任何内容。table类具有我需要使用的TableField静态成员,但无法按名称查找它们。我还缺什么吗?

如果没有,我看到两种行动方案。我更喜欢第一个:

>

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

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

    编辑:我想我想要的可能是DSL.条件(),它可以接受SQL字符串和绑定参数,或者您可以创建这样的条件:

    query.addConditions(DSL.condition("? = ?", fieldName,fieldValue));
    
  • 共有1个答案

    竺鸿骞
    2023-03-14

    您正在寻找的方法称为TableLike.field(String),因此它存在于jOOQ API中的所有表表达式中。例如:

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

     类似资料:
    • 我有一个应用程序正在从jooq切换到jdbc,我使用jdbc创建了一个表,但我需要编辑一些jooq查询来加入它,问题是自动生成的jooq tables类无法识别它,所以有没有办法通过字符串名引用表? 下面是一些示例代码: 我如何在此处加入“连接”表?没有桌子。连接,因为它是以不同的方式创建的。 有很多疑问,所以我们希望根据需要逐步进行转换。 更新:我尝试添加以下内容,并且查询运行,但是我尝试获取的

    • 问题内容: 您可以这样创建一个字符串扩展名: 但是,如果您希望将其应用于可选字符串怎么办? 问题答案: 在Swift 3.1中,您还可以向可选值添加扩展:

    • 问题内容: 是否有任何使用Spring或java替换模板字符串以及值的API。 例如: 其中参数(,)中的形式。 问题答案: 我最喜欢的模板引擎是Apache Velocity 也可以与Spring很好地集成,此处有介绍性文章

    • 问题内容: 通过使用 Thymeleaf 作为模板引擎,是否可以在带有子句的简单对象中动态添加CSS类/从中删除CSS类? 通常,我可以按如下方式使用条件子句: 我们将创建到 lorem ipsum 页面的链接,但 前提 是条件子句为true。 我正在寻找不同的东西:我希望该块始终可见,但根据情况使用可更改的类。 问题答案: 也有。 如果为,则将导致:

    • 通过使用Thymeleaf作为模板引擎,是否可以使用子句在简单的中动态添加/删除CSS类? 通常,我可以使用以下条件子句: 我们将创建指向lorem ipsum页面的链接,但前提是条件子句为true。 我在寻找一些不同的东西:我希望块总是可见的,但是根据情况可以改变类。