当前位置: 首页 > 面试题库 >

JOOQ:如何将接口添加到生成的记录类

廉展鹏
2023-03-14
问题内容

我正在使用Java 8的JOOQ 3.6.4从架构中生成一组JOOQ记录。

有些表是结构相似的参考数据,假设它们具有ID,CODE和VALUE列(它们可能具有其他列,但至少都具有这些列)。

在我的代码中(不是由JOOQ生成的),我有一个接口“
ReferenceData”,该接口定义了与JOOQ为这三列生成的代码匹配的访问器。我想告诉JOOQ向"implements ReferenceData"它生成的Record对象添加一个子句(JOOQ已经生成的代码将自动实现接口)。

我并不是在问JOOQ是否自动找出接口,我很好地列出了每个表应在XML配置中实现的接口。

问题1 :是否可以在不编写自定义生成器类的情况下配置JOOQ以生成Implements子句?

如果必须编写一个自定义生成器类-我仍然希望定义哪些表记录实现XML配置中的接口。

问题2 :是否有示例定义在XML中定义的自定义数据,该数据向下传递到自定义生成器类中?


问题答案:

这可以使用

  • 发电机策略
  • 匹配器策略(基于XML的内置生成器策略)

发电机策略

使用生成器策略,您将实现以下代码:

public class MyStrategy extends DefaultGeneratorStrategy {
    @Override
    public List<String> getJavaClassImplements(Definition definition, Mode mode) {
        if (mode == Mode.RECORD && definition.getQualifiedName().matches("some regex")) {
            return Arrays.asList(MyCustomInterface.class.getName());
        }
    }
}

然后可以将上面的内容钩入您的代码生成器配置中,如下所示:

<generator>
  <strategy>
    <name>com.example.MyStrategy</name>
  </strategy>
</generator>

配对策略

使用匹配器策略,您将基本上编写:

<generator>
  <strategy>
    <matchers>
      <tables>
        <table>
          <expression>A_REGEX_MATCHING_ALL_RELEVANT_TABLES</expression>
          <recordImplements>com.example.MyCustomInterface</recordImplements>
        </table>
      </tables>
    </matchers>
  </strategy>
</generator>

如您所见,对于像您这样的简单用例,匹配器策略比生成器策略更易于配置。



 类似资料:
  • 我正在使用JOOQ 3.6.4和Java 8从模式生成一组JOOQ记录。 有些表是结构类似的引用数据,比如说它们有ID、CODE和VALUE列(它们可能有其他列,但它们都至少有这些列)。 在我的代码中,不是由JOOQ生成的,我有一个接口“ReferenceData”,它定义了与JOOQ为这三列生成的代码相匹配的访问器。我想告诉JOOQ在它生成的记录对象中添加一个“implements Refere

  • 本文向大家介绍F# 将成员函数添加到记录,包括了F# 将成员函数添加到记录的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 在log4j1.2中,您只需在运行时获取一个记录器并添加一个appender。例如,这对于测试目的很方便。我们曾经创建一个模拟appender并将其添加到记录器中。随后,我们可以做出不同的断言。 log4j2的等价物是什么? 例如,这个例子展示了其他人是如何添加测试附加器的。 log4j2页面显示了一些关于如何添加附加器的示例。但是,它们将追加器添加到整个上下文中。这似乎不同于为一个特定的记录器添

  • 我四处搜索,找到了关于如何在woocommerce中添加产品的链接,但关于如何使用自定义php片段更新或添加订阅记录的链接不多。

  • 我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。 我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。

  • 我在PostgreSQL数据库中定义了一个类型和一个视图。 使用3.7版本上的代码生成,我得到了一个UDT记录类和一个表记录类,以及UDT POJO类和表POJO类。 生成的类有一个数组。 而在POJO中,我希望有一系列POJO,例如: 另一个有趣的事实是,pojo和类型的记录在文件夹中,而对于视图,它们在文件夹中:也许这有助于找到解决方案/解释。 根据要求,我附上了一个工作示例,该示例生成了我所