Генерация имен полей в JOOQ - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь сгенерировать модель JOOQ из базы данных. Для записи FooRecord и поля time_stamp, я бы хотел, чтобы результирующие сеттеры и геттеры были getTime_stamp и setTime_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 и без необходимости реализовывать свой собственный класс Generator в Java?

1 Ответ

1 голос
/ 05 февраля 2020

Как сказал Лукас Эдер, я реализовал 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 и запустил его, и теперь сеттеры и геттеры создавались так, как я хотел. Еще раз спасибо.

...