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

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

温举
2023-03-14

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

有些表是结构类似的引用数据,比如说它们有ID、CODE和VALUE列(它们可能有其他列,但它们都至少有这些列)。

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

我不是要求JOOQ自动找出接口,我可以列出每个表应该在XML配置中实现哪些接口。

问题1:是否有任何方法可以配置JOOQ以生成实现子句而无需编写自定义生成器类?

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

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

共有1个答案

卫寒
2023-03-14

这可以使用

  • 发电机策略

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

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>

使用matcher策略,您基本上可以编写:

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

如您所见,对于像您这样的简单用例,matcher策略比generator策略更容易配置。

 类似资料:
  • 问题内容: 我正在使用Java 8的JOOQ 3.6.4从架构中生成一组JOOQ记录。 有些表是结构相似的参考数据,假设它们具有ID,CODE和VALUE列(它们可能具有其他列,但至少都具有这些列)。 在我的代码中(不是由JOOQ生成的),我有一个接口“ ReferenceData”,该接口定义了与JOOQ为这三列生成的代码匹配的访问器。我想告诉JOOQ向它生成的Record对象添加一个子句(JO

  • 我正在用JOOQ和Postgres运行代码生成。除了作为类生成的表正在向父构造函数添加null参数外,所有操作似乎都正常工作: 小孩 其中,作为父方法/超级方法: 除此之外,它还向父对象中不存在的子对象中的方法添加重写: 父级中不存在上述方法 有什么想法吗?仅供参考:我的模式xml配置的示例块(不确定它是否重要):

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

  • 我正在尝试运行一个由其他人创建的已经存在的eclipse项目。 在将其导入eclipse并尝试作为->Java应用程序运行之后,它失败了,因为它在bin/resources中找不到.properties文件 我打印出eclipse使用的类路径 果然,它包括bin和所有lib/*.jars,但不包括bin/resources。将.properties文件复制到bin中可以使程序正常工作,但我想了解如

  • 这在某个时间点上很有效,但我有一个用例,在应用程序运行时可以添加用户。 我可以通过哪种方法(通过控制器/服务)进行启动后操作?我想它可能是(它包含方法),但我不确定如何引用或配置它。