首页 > 解决方案 > 在 JOOQ 中生成字段名称

问题描述

我正在尝试从数据库生成 JOOQ 模型。对于一个记录FooRecord和一个字段time_stamp我希望得到的 setter 和 getter 是getTime_stampandsetTime_stampXY 问题免责声明:这是针对 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 类?

标签: jooqdata-generation

解决方案


正如 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 以我想要的方式生成。再次感谢。


推荐阅读