我使用JOOQ 3.6.4和Java 8从模式生成一组JOOQ记录。
有些表是类似结构的参考数据,我们说它们有ID,CODE和VALUE列(它们可能有其他列,但它们至少都有这些列)。
在我的代码中,不是由JOOQ生成的,我有一个接口" ReferenceData"它定义了与JOOQ为这三列生成的代码匹配的访问器。我想告诉JOOQ在它生成的Record对象中添加"implements ReferenceData"
子句(JOOQ已生成的代码将自动实现接口)。
我并不是要求JOOQ自动找出接口,我可以列出每个表应该在XML配置中实现的接口。
问题1 :有没有办法在不编写自定义生成器类的情况下配置JOOQ来生成implements子句?
如果我必须编写一个自定义生成器类 - 我仍然希望定义哪些表记录实现XML配置中的接口。
问题2 :是否有一个在XML中定义自定义数据的示例,该数据被传递到自定义生成器类中?
答案 0 :(得分:6)
这可以使用
完成使用生成器策略,您将实现以下代码:
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>
正如您所看到的,对于像您这样的简单用例,匹配器策略比生成器策略更容易配置。