Хобрук: Ваш путь к мастерству в программировании

Генерация имен полей в JOOQ

Я пытаюсь создать модель 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 по умолчанию, и он генерирует _9 _ / _ 10_, а также _11 _ / _ 12_

Проблема в том, что transform применяется после предложения expression, а не наоборот.

Есть ли способ сгенерировать сеттеры / получатели, как я хочу, с использованием настроек xml и без необходимости реализовывать мой собственный класс Generator в Java?

05.02.2020

  • Вам нужно будет реализовать это программно 05.02.2020
  • Хорошо, спасибо за невероятно быстрый ответ! 05.02.2020

Ответы:


1

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

05.02.2020
Новые материалы

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

Что в лицо
Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..