【问题标题】:Generating field names in JOOQ在 JOOQ 中生成字段名称
【发布时间】:2020-02-05 10:29:43
【问题描述】:

我正在尝试从数据库生成 JOOQ 模型。对于记录 FooRecord 和字段 time_stamp我希望生成的 setter 和 getter 分别为 getTime_stampsetTime_stampXY question disclaimer:这是用于 JDBI 映射的。我没有按照惯例使用 JOOQ,只是用于 POJO 生成。

这是我的library.xmlsn-p:

    <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 类?

【问题讨论】:

  • 你必须以编程方式实现它
  • 好的,感谢您的快速回复!

标签: jooq data-generation


【解决方案1】:

正如 Lukas Eder 所说,我根据 docs 中显示的示例实现了 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 按我想要的方式生成了。再次感谢。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2012-05-03
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2021-04-02
    • 2014-06-11
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多