Перейти к основному содержимому

Поддержка JPA — состояние экосистемы инструментов в 2021 году

· 7 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим некоторые вспомогательные инструменты для JPA. Мы сосредоточимся на подключаемых модулях, доступных для двух самых популярных IDE: IntelliJ IDEA и Eclipse .

2. Поддержка JPA в IntelliJ IDEA и Eclipse

JPA — это наиболее широко используемая спецификация для работы с реляционными базами данных в приложениях Java. По сути, JPA определяет все аспекты реализации, от аннотаций до правил обработки данных.

Обычно мы работаем не только с сущностями JPA. В дополнение к чистому коду, связанному с ORM, нам также могут понадобиться такие вещи, как система управления версиями базы данных, оптимизация запросов SQL/JPQL/HQL, интеграция с контейнерами IoC и т. д. Вот где плагины становятся очень полезными. Они могут поддерживать обратный инжиниринг базы данных, генерацию схемы, генерацию сценариев миграции или создание каркасов репозиториев Spring Data JPA.

Когда дело доходит до использования фреймворков JPA в разработке приложений, это обычно делается с помощью IDE. Это потому, что они предоставляют нам мощный набор инструментов для повышения производительности разработчика:

  • Генерация стандартного кода
  • Реверс-инжиниринг базы данных
  • Генерация определения объектов данных
  • Расширенное автозаполнение кода для Java и JPQL
  • Рекомендации по коду для JPA
  • и т.п.

Давайте взглянем на две наиболее распространенные IDE — IntelliJ IDEA и Eclipse — и посмотрим, что они предоставляют с точки зрения поддержки разработки приложений JPA.

3. IntelliJ ИДЕЯ

IntelliJ IDEA поставляется в двух версиях: Community Edition (бесплатная) и Ultimate (платная). Версия Ultimate имеет встроенный плагин , поддерживающий JPA.

С другой стороны, Community Edition не предоставляет специализированной поддержки для работы с JPA, Hibernate, Spring Data и т. д.

Тем не менее, IntelliJ имеет широкий рынок с различными плагинами. Поэтому мы можем найти поддержку практически любой технологии, и JPA не исключение.

Для пользователей сообщества IntelliJ IDEA мы расскажем о подключаемом модуле JPA Buddy для поддержки функций JPA. Тем не менее, он также может стать хорошим дополнением к IntelliJ IDEA Ultimate.

3.1. Плагин JPA для IntelliJ Ultimate

Этот плагин предоставляет набор расширенных функций, включая:

  • ER-диаграммы для сущностей JPA
  • Окно инструментов сохранения
  • Реверс-инжиниринг базы данных
  • Консоль JPA для тестирования оператора JPQL и создания сценариев DDL
  • Проверка и завершение кода, специфичные для JPA

В IntelliJ IDEA Ultimate мы можем использовать специальное окно инструментов — «Постоянство». Это отобразит структуру объектов JPA в проекте.

В этом представлении мы можем создавать атрибуты и отношения сущностей с помощью визуальных инструментов:

./074774887ffee4f812dae23a014ebcae.png

Окно «Постоянство» также позволяет быстро перемещаться между кодом и связанной с ним иерархией сущностей с помощью значков желоба в редакторе кода.

Мы также можем воспользоваться процессом обратного проектирования. Он сгенерирует для нас объекты JPA, ассоциации и правильные аннотации. Кроме того, он создает файл pesistence.xml или обновляет его, если он существует.

Помимо общей поддержки JPA, это окажет дополнительную помощь, если мы выберем Hibernate в качестве реализации JPA. Мы можем выполнять специфичные для Hibernate действия, такие как (но не ограничиваясь ими):

  • Управление файлами конфигурации и сопоставления
  • Выполнение запросов HQL в консоли HQL

Подробный обзор плагина в действии доступен на Youtube .

3.2. JPA приятель

JPA Buddy предоставляет набор визуальных редакторов для работы с сущностями JPA и репозиториями Spring Data JPA. Кроме того, он поддерживает языки Java и Kotlin.

Давайте посмотрим на основные функции, которые он предоставляет:

  • Визуальные инструменты и навигация по коду
  • Поддержка проверки компонентов Hibernate
  • Поддержка типов гибернации и конвертеров JPA
  • Поддержка инструментов управления версиями базы данных (Liquibase и Flyway)
  • Инспекции кода, специфичные для JPA
  • Котлин поддержка
  • Визуальный дизайнер Spring Data Repositories

Нам не нужно запоминать все аннотации JPA, правила именования методов репозитория Spring Data или теги Liquibase. Плагин позволяет нам выбирать необходимые элементы из палитры.

Следовательно, это позволяет нам обновлять их свойства в визуальном редакторе вместо того, чтобы писать код:

./88620a9f32572ce5599154225b06ae60.png

Еще одна проблема, которую решает JPA Buddy, — управление версиями базы данных . Плагин поддерживает инструменты Liquibase и Flyway и может соответственно генерировать сценарии миграции XML или SQL.

JPA Buddy создает сценарии, сравнивая базу данных проекта с фактическими объектами JPA, определенными в кодовой базе. После генерации мы можем просмотреть сгенерированные скрипты и обновить их перед сохранением в кодовой базе.

В дополнение к этому плагин представляет несколько интеллектуальных проверок и быстрых исправлений , таких как:

  • Отсутствие поля ID в коде сущности
  • Отсутствие конструктора без аргументов
  • Возможные проблемы с использованием Lombok (например, неправильное определение equals() и hashCode())

Помимо поддержки JPA, плагин может помочь в создании репозиториев Spring Data JPA . Он предоставляет визуальные редакторы, которые могут помочь нам с правильными именами методов репозитория.

4. Затмение

Как мы знаем, для Eclipse существует большая экосистема плагинов. Тем не менее, плагин Dali Tools является стандартом де-факто для поддержки JPA в Eclipse IDE .

Давайте изучим этот плагин. Затем мы увидим, как получить дополнительную поддержку, если мы будем использовать Hibernate в нашем проекте.

4.1. Инструменты Дали

Дали охватывает практически все направления развития JPA . Его функциональные возможности включают (но не ограничиваются):

  • ER-диаграммы для сущностей JPA
  • Визуальные редакторы и навигаторы
  • Генерация DDL (SQL) на основе модели JPA
  • Реверс-инжиниринг базы данных

Плагин предоставляет два основных визуальных инструмента . Контекстно-зависимый редактор «JPA Details» позволяет нам работать с различными объектами JPA, которые мы можем выбрать в навигаторе «JPA Structure»:

./94fe7582a8915a0d92028c76b75fc067.png

Мы можем выбрать и изменить:

  • Определение сущности, включая именованные запросы (с помощью кода JPQL)
  • Атрибуты и ассоциации сущностей: один ко многим, многие к одному и т. д.
  • Файл orm.xml . Мы можем редактировать сопоставления по умолчанию и информацию о сохранении для проекта.

Кроме того, специальный редактор persistence.xml позволяет нам не запоминать все параметры, которые могут использоваться в этом файле конфигурации в соответствии со спецификацией JPA. Мы можем редактировать все, от параметров подключения до тайм-аута блокировки или режима проверки.

Плагин Dali Tools может генерировать и выполнять DDL SQL для конкретной базы данных на основе модели JPA. Кроме того, фаза выполнения отделена от генерации, поэтому мы можем просмотреть сгенерированный SQL, прежде чем применять его к базе данных приложения.

Настройки процесса реверс-инжиниринга базы данных позволяют нам изменить следующие параметры в коде сущностей:

  • Стратегия генерации ПК
  • Политика доступа к полям
  • Политика извлечения ассоциации
  • Класс свойств коллекции (список, набор,…)

4.2. Инструменты гибернации JBoss

Давайте рассмотрим вариант, который у нас есть, если нам нужна поддержка специально для Hibernate. В репозитории плагинов Eclipse мы можем найти плагин Jboss Hibernate Tools.

Этот подключаемый модуль можно использовать независимо или в сочетании с JPA Tools . Он обеспечивает:

  • Инструменты генерации кода, в том числе обратный инжиниринг и рефакторинг
  • Отображение и редактирование расширенных файлов конфигурации и сопоставления Hibernate
  • Консоль выполнения HQL и предварительный просмотр SQL
  • Экспорт модели данных

Инструмент обратного проектирования позволяет настроить множество параметров, включая маски имен таблиц, сопоставление типов и даже исключить некоторые столбцы из сгенерированного класса сущностей:

./acd0a0bba0fd8b7370d1559f6475bb4f.png

Сгенерированные сущности JPA могут быть представлены как POJO с файлами сопоставления *.hbm.xml или как аннотированные классы. Кроме того, плагин поддерживает генерацию объектов DAO для каждой сущности с помощью методов CRUD. DAO использует специфичные для Hibernate классы для доступа к базе данных.

Консоль выполнения HQL и редактор критериев позволяют нам генерировать и выполнять запросы HQL. Помимо выполнения произвольного HQL, консоль обеспечивает предварительный просмотр SQL для оператора HQL. Это может быть полезно для создания оптимизированных SQL-запросов, чтобы избежать «n+1 select» и других крайних случаев ORM.

5. Вывод

В этой статье мы рассмотрели несколько инструментов для поддержки JPA, доступных в самых популярных Java IDE: IntelliJ IDEA и Eclipse.

Мы увидели, как они могут помочь во время разработки писать более качественные приложения и повышать производительность. Итак, при выборе лучшего инструмента для работы мы должны обращать внимание не только на «чистые» функции JPA, но и на интеграцию с IDE и выбранный стек разработки.