Статьи

Интеграция jOOQ с Grails с помощью плагина UWS-jOOQ

Вступление

Grails — это веб-фреймворк, призванный повысить производительность разработки. Одной из основных функций является генерация схемы базы данных, ориентированной на домен. Приложения, созданные с помощью Grails, могут обновить существующую схему непосредственно перед их запуском. Для этого Grails использует встроенные преобразователи доменов или миграции в более сложных случаях. Целью плагина UWS-jOOQ Grails является интеграция jOOQ в существующий жизненный цикл Grails, чтобы использовать возможности jOOQ без ущерба для возможностей, предоставляемых Grails.

UWS-180 Эта статья является частью серии, представленной вам немецким партнером по интеграции jOOQ UWS Software Service (UWS) . UWS специализируется на разработке программного обеспечения, модернизации приложений и аутсорсинге, уделяя особое внимание экосистеме Java Enterprise.

Почему я должен использовать JOOQ с Grails?

В корпоративных приложениях мы часто сталкиваемся с проблемами с производительностью Hibernate, отсутствием поддержки некоторых операторов или просто слишком большими трудностями, вызванными моделью Hibernate. Язык запросов Hibernate HQL часто недостаточно совершенен, чтобы соответствовать некоторым требованиям. Это заставляет нас использовать простой SQL, который неплох и помогает решать конкретные бизнес-задачи. Однако в больших проектах, где задействована большая группа людей и продукт постоянно развивается, безопасность типов очень важна, но при использовании простого SQL ее отбрасывают. Это тот момент, когда фреймворк jOOQ превосходит все и в игру входит плагин UWS-jOOQ Grails .

Как я могу интегрировать JOOQ в Grails?

Мы попытались обеспечить простую интеграцию jOOQ в Grails, используя встроенное разрешение зависимостей Grails. Просто добавьте следующую строку в раздел плагинов вашего BuildConfig.groovy:

1
compile ':uws-jooq:0.1.1'

Добавьте конфигурацию плагина в ваш Config.groovy:

1
2
3
4
jooq.dataSource = ['dataSource']
jooq.xmlConfigDir = "src/resources/jooq/"
jooq.generatedClassOutputDirectory = 'src/java'
jooq.generatedClassPackageName.dataSource = 'ie.uws.example'

Как и в этом примере, плагин позволяет настроить источники данных, которые будут использоваться, а также некоторые пути ключей. В конце концов вы также захотите взглянуть на настроенную версию Config.groovy в нашем примере проекта интеграции .

Далее jOOQ нужен файл конфигурации xml , который может быть сгенерирован плагином с помощью следующей команды. Плагин будет использовать ваши существующие источники данных и их конфигурацию для генерации конфигурации jOOQ:

1
grails jooq-generate-config

Теперь все настройки готовы, и пришло время перейти к одной из основных функций jOOQ, которая является типобезопасным SQL. С помощью следующей команды jOOQ сгенерирует Java-классы, которые вы хотите использовать при написании SQL, поскольку они дадут вам автозаполнение на основе компилятора:

1
grails jooq-init

Теперь, когда все готово, допустим, вы хотите вставить новую запись в вашу базу данных через jOOQ на одном из ваших контроллеров. Это так просто:

01
02
03
04
05
06
07
08
09
10
11
12
class ExampleController {
  JooqService jooqService
 
  def insert() {
    DSLContext dsl = jooqService.dataSource
    BookRecord record = dsl.newRecord(Tables.BOOK)
    record.author = "John"
    record.name = "Uws"
    record.version = 1
    record.store()
  }
}

Как работает интеграция jOOQ с Grails под капотом?

В приведенном выше примере вы заметили JooqService, который внедряется в Grails. JooqService — это ваша точка входа, когда дело доходит до использования jOOQ в Grails, поскольку он может выбрать ваш источник данных и предоставить вам контекст jOOQ DSL. Когда у вас есть несколько источников данных, он также позволяет вам выбрать другой источник данных, просто указав его имя:

1
DSLContext dsl = jooqService.dataSource_custom

Обратите внимание, что автозаполнение не скажет вам о существовании поля dataSource_custom но JooqService справится с этим за вас.

В версии 0.1 мы добавили JooqService, но DSLContext должен быть сгенерирован на основе схемы вашей базы данных. Поэтому важно выполнять jooq-init каждый раз, когда вы изменяете модель домена Grails, поскольку эта команда компилирует ваш код и выполняет все миграции, чтобы последние классы Java генерировались в последней схеме базы данных. Благодаря такому подходу можно генерировать структуры даже из базы данных H2 в памяти, которая не будет доступна сразу после закрытия приложения.

Лучшие практики использования jOOQ с Grails

Интеграция устаревших баз данных

Вы можете столкнуться с ситуацией, когда вам нужно подключиться к какой-либо устаревшей базе данных с помощью платформы Grails. Конечно, это выполнимо, но сначала нужно создать правильное отображение Hibernate или — если повезет, — позволить Hibernate создать подходящий для вас. С помощью этого плагина вы можете просто позволить jOOQ генерировать свои Java-классы, и вы готовы к взаимодействию с базой данных, используя полностью безопасный тип DSL.

Позвольте схеме базы данных изменить ваш код

Это один из самых ценных подарков, когда вы знаете, что что-то сломается рано. С использованием jOOQ в Grails это произойдет во время компиляции. Когда вы выполняете jooq-init , ваше приложение компилируется, а Java-классы восстанавливаются с использованием самой последней схемы базы данных. Если сгенерированные классы изменятся, вы получите уведомление о том, что ваш код больше не может компилироваться. Вы можете исправить ваши операторы SQL и убедиться, что ваше приложение не сломается во время выполнения.

Храните сгенерированные классы в вашей системе контроля версий

Мы рекомендуем вам зарегистрировать сгенерированные классы jOOQ в вашу VCS вместе с остальным исходным кодом вашего приложения. Когда вы используете классы jOOQ для взаимодействия с базой данных, для компиляции обязательно, чтобы эти классы уже были определены. Вы используете другой подход? Пожалуйста дай нам знать!

Дорожная карта

Мы планируем еще больше упростить интеграцию и подключить jooq-init к обычному процессу компиляции jooq-init . Также мы хотели бы сделать наш плагин более трудным для неправильного использования (см. Раздел jooqService ) и добавить возможность использовать jOOQ не только в сервисах или контроллерах, но и в простых Java-классах.

Вклад в UWS-jOOQ Grails-Плагин

Это программное обеспечение распространяется по лицензии Apache версии 2.0 . Мы хотим сохранить это программное обеспечение бесплатно и предоставлять услуги людям
кто интегрирует JOOQ и Grails. Если вы заинтересованы в этом проекте, не стесняйтесь отправлять вопросы или запрашивать запросы в репозитории проекта git.

дальнейшее чтение

Следующие ссылки предоставляют дополнительную информацию о UWS-jOOQ Grails-Plugin:

Общая информация о UWS или jOOQ может быть найдена здесь: