jooq - 在 JOOQ 中生成字段名称
问题描述
我正在尝试从数据库生成 JOOQ 模型。对于一个记录FooRecord
和一个字段time_stamp
,我希望得到的 setter 和 getter 是getTime_stamp
andsetTime_stamp
。XY 问题免责声明:这是针对 JDBI 映射的。我没有按照惯例使用 JOOQ,只是为了生成 POJO。
这是我的一个片段library.xml
:
<strategy>
<matchers>
<fields>
<field>
<expression>^(.*)$</expression>
<fieldIdentifier>
<transform>AS_IS</transform>
</fieldIdentifier>
<fieldSetter>
<transform>UPPER_FIRST_LETTER</transform>
<expression>set$0</expression>
</fieldSetter>
<fieldGetter>
<transform>UPPER_FIRST_LETTER</transform>
<expression>get$0</expression>
</fieldGetter>
</field>
</fields>
</matchers>
</strategy>
这会生成Gettime_stamp()
和Settime_stamp(Timestamp)
。
我尝试使用他们的默认 AS_IS 生成器,这会生成time_stamp()
/time_stamp(Timestamp)
和gettime_stamp()
/settime_stamp(Timestamp)
问题是transform
在子句之后应用了expression
,反之亦然。
有没有办法使用 xml 设置生成我想要的 setter/getter,而不必在 Java 中实现我自己的 Generator 类?
解决方案
正如 Lukas Eder 所说,我根据文档中显示的示例实现了 GeneratorStrategy :
public class AsInDatabaseStrategy extends DefaultGeneratorStrategy {
public String capitalize(String input) {
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
@Override
public String getJavaSetterName(Definition definition, Mode mode) {
return "set" + capitalize(definition.getOutputName());
}
@Override
public String getJavaGetterName(Definition definition, Mode mode) {
return "get" + capitalize(definition.getOutputName());
}
}
我添加了实现类并重新打包 JAR 并运行它,现在 setter 和 getter 以我想要的方式生成。再次感谢。
推荐阅读
- javascript - JavaScript 中的 HTML IFrame ContentEditable 光标位置
- sql-server - 在函数中使用临时表
- reactjs - 如何使用向后和向前浏览器按钮处理状态
- java - 如何在 JTable 中的级联 JCombobox 选项中进行选择?
- python - 工厂模式中的静态方法访问
- python - 设置未在 GUI 中输入的变量和“无响应”问题
- c++ - 类中的 C++ 后台线程 - 实例范围
- c++ - 根据特定设计在win32中平铺菜单项
- lerna - npm链接执行命令找不到依赖命令
- java - 在android studio中编辑年龄文本中的验证