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

Sho*_*orn 9 java sql code-generation jooq

我正在使用JOOQ 3.6.4和Java 8从模式生成一组JOOQ记录.

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

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

我不是要求JOOQ自动找出接口,我很好地列出了每个表应该在XML配置中实现的接口.

问题1:有没有办法配置JOOQ来生成implements子句而无需编写自定义生成器类?

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

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

Luk*_*der 7

这可以使用

发电机策略

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

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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以将上面的内容连接到您的代码生成器配置中:

<generator>
  <strategy>
    <name>com.example.MyStrategy</name>
  </strategy>
</generator>
Run Code Online (Sandbox Code Playgroud)

匹配策略

使用匹配策略,您基本上可以写:

<generator>
  <strategy>
    <matchers>
      <tables>
        <table>
          <expression>A_REGEX_MATCHING_ALL_RELEVANT_TABLES</expression>
          <recordImplements>com.example.MyCustomInterface</recordImplements>
        </table>
      </tables>
    </matchers>
  </strategy>
</generator>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,对于像您这样的简单用例,匹配器策略比生成器策略更容易配置.