Рубрики
Без рубрики

JPA работает еще проще со своим приятелем

Итак, Привет, Мир… После почти года разработки наконец-то появилась первая версия JPA Buddy… Помеченные java, jpa, hibernate, spring data.

Итак, Привет, Мир… После почти года разработки наконец-то была выпущена первая версия JPA Buddy! Это инструмент, который должен стать вашим верным помощником по кодированию для проектов с JPA и всем, что с ним связано: Hibernate, Spring Data, Liquibase и другим основным стеком.

“Зачем мне им пользоваться?” – это справедливый вопрос по отношению к любому новому инструменту или структуре. Короче говоря, если вы используете JPA для сохранения данных, JPA Buddy поможет вам быть более эффективными. В этой статье я представлю обзор этого инструмента. Я надеюсь, что он займет достойное место среди самых любимых инструментов для разработчиков Java, тех, кто использует JPA, Spring, Liquibase и, конечно же, самую передовую Java IDE – IntelliJ IDEA.

История, стоящая за

Мы являемся создателями платформы CUBA (кстати, несколько недель назад она была переименована в Jmix:)) – среды быстрой разработки приложений на Java. Платформа CUBA – довольно уникальный продукт. Он состоит из обеих частей: фреймворка и инструмента разработки. Одной из самых любимых частей CUBA Studio (специализированная среда разработки для КУБЫ) является “Entity Designer” – она поразила более 20 000 членов сообщества CUBA тем, насколько легко и быстро любой может создать свою модель данных. Даже для тех, кто никогда не слышал о JPA, такие вещи, как создание объектов JPA, ограничений, сценариев DDL, становятся несложными.

С 2016 года, когда КУБА перешла на открытый исходный код, мы приняли участие в десятках конференций по всему миру, собирая отзывы и лучше понимая, что нужно разработчикам. И один из самых раздражающих вопросов был – “Можем ли мы использовать ваш entity designer в нашем приложении без CUBA?”. Я рад сообщить, что с помощью JPA Buddy нам удалось изменить наш отрицательный ответ на … да!

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

Масштаб

До того, как JPA Buddy получил свою первую строку кода, мы провели опрос, чтобы собрать различные варианты использования JPA и сопутствующих технологий. Результат не выглядит очень удивительным – среднестатистическое приложение в настоящее время представляет собой приложение Spring Boot с Hibernate в качестве реализации ORM, Spring Data JPA в качестве механизма обработки данных и Flyway или Liquibase для системы миграции баз данных. Ах, чуть не забыл о Ломбоке… Этот технологический стек стал нашим основным направлением для первого выпуска.

Говоря о цели инструмента, мы преследовали следующие цели:

  • Сведите к минимуму ручное шаблонное кодирование – инструмент должен генерировать код, который вы написали бы вручную, но быстрее
  • Экономьте время на чтении документации – инструмент должен предоставлять интуитивно понятные и понятные визуальные дизайнеры
  • Оставьте свободу выбора – инструмент не должен диктовать какой-либо конкретный стиль кодирования, но предоставлять различные варианты
  • Обнаруживать потенциальные проблемы и предоставлять способы устранения наиболее распространенных проблем – инструмент должен предупреждать разработчика о таких проблемах как можно раньше, в идеале на этапе кодирования, а не во время выполнения
  • Обеспечить ориентированный на данные взгляд на проект и удобную навигацию между связанными объектами Для первого выпуска мы смогли предоставить довольно значительное количество функций, охватывающих большинство аспектов разработки моделей данных. Хорошая новость для тех, кто использует Liquibase – она реализована и доступна в первом выпуске JPA Buddy. Не очень хорошая новость для пользователей Flyway – она находится в списке приоритетных функций.

В рамках долгосрочного планирования мы собираемся внедрить следующий набор функций:

  • Аннотации, специфичные для гибернации, такие как @Where, @Natural, @Formula, поиск в гибернации и другие…
  • Визуальный конструктор запросов
  • Аудит с использованием Envers и Spring Data JPA
  • Обратный инжиниринг схемы базы данных
  • Поддержка Kotlin Есть также некоторые функции, которые мы также учитываем на втором этапе: поддержка Quarks и Micronaut, REST API и генерация пользовательского интерфейса для операций CRUD.

Как вы можете видеть, впереди еще долгий путь и мы были бы очень признательны вам за помощь в определении приоритетов всех вышеперечисленных функций – не стесняйтесь сообщать нам свою точку зрения через нашу контактную форму, Twitter или присоединяйтесь к чату Discord.

Обзор

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

Структура JPA

Структура JPA всегда доступна в левом нижнем углу. Он обеспечивает всестороннее представление проекта, ориентированное на данные. Вы можете использовать его для самых разных целей:

  • Пройдите по модели данных. Структура сущности представлена иерархическим способом. Вы можете легко просматривать объекты, ссылающиеся на текущий объект, и объекты, на которые ссылается текущий объект, и перемещаться по ним. Это чрезвычайно полезная функция, особенно для тех, кто только погружается в существующий проект с большим графом сущностей, или для рецензентов кода, которые часто видят части модели данных впервые и имеют ограниченное время, чтобы понять, как она спроектирована.
  • Создавайте объекты, связанные с данными: сущности, преобразователи JPA/типы гибернации, хранилища данных Spring и список изменений Liquibase.
  • Наблюдайте за связанными хранилищами данных Spring для каждого объекта.
  • Просмотрите список изменений Liquibase вместе с их внутренней структурой для упрощения навигации.
  • Укажите параметры, связанные с плагином, такие как подключение к базе данных, единицы сохранения и другие, которые плагин не смог обнаружить автоматически.

Еще больше возможностей впереди…

Палитра JPA и инспектор

Палитра JPA находится в правом верхнем углу, и ее содержимое зависит от контекста. Он доступен только тогда, когда Buddy готов предложить что-то для быстрой генерации кода. В настоящее время инструмент появляется при редактировании следующих объектов: JPA Entity, Spring Data repository и Liquibase changelog. Просто найдите нужный вариант из списка и дважды щелкните по нему!

Инспектор JPA размещается в правом нижнем углу, под палитрой, и становится видимым и невидимым синхронно с ней. Инспектор также зависит от контекста. В то время как Палитра предоставляет вам ряд опций для создания новых частей кода, Инспектор предназначен для изменения уже существующего кода. Здесь вы можете увидеть, какими возможностями вы обладаете для настройки выбранной части кода, например поля сущности или инструкции из набора изменений Liquibase.

Эти функции очень полезны как для новичков, так и для опытных пользователей. Новички могут оценить полный список опций, выбрать подходящий и сгенерировать корректный код с помощью интуитивно понятных визуальных дизайнеров. Пожилые люди часто забывают незначительные вещи, которые не используются ежедневно, и Бадди сэкономит несколько секунд их драгоценного времени на поиске в документации, чтобы запомнить правильную аннотацию или синтаксис.

Интеграция ликвидной базы

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

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

Во-вторых, вы можете определить свои собственные сопоставления, соответствующие типам Java (конвертеры/типы гибернации) и тем, которые следует использовать для каждой конкретной СУБД. Позвольте мне привести вам несколько примеров, когда эта функция будет чрезвычайно полезна:

Используя поле bytearrayentity, генератор схемы гибернации, а также Liquibase сопоставят ваш Byte[] с довольно экзотическим типом OID. Я предполагаю, что довольно многие разработчики предпочли бы использовать байты вместо предлагаемого по умолчанию типа. Это можно было бы легко решить, указав bytes в качестве желаемого типа сопоставления для byte[]. Использование конвертера JPA или пользовательского типа гибернации приводит к непредсказуемому поведению или даже сбоям в генераторе схемы гибернации и генераторе журнала изменений Liquibase. Вы можете определить правильный тип в JPA Buddy, чтобы решить эту проблему. Используя строковое поле, мы можем захотеть сопоставить его с nvarchar вместо значения по умолчанию varchar .

Все эти случаи традиционно можно было бы решить с помощью атрибута column Definition , однако это решение не будет работать для решений с несколькими СУБД.

Наконец, самая экономящая время функция: генератор списка изменений Liquibase. Исходя из моего опыта (подтвержденного ранее упомянутым опросом), существует два основных способа создания списков изменений Liquibase:

  • Написание журналов изменений вручную.
  • Генерация сценариев путем сравнения двух баз данных, исходной (представляющей фактическое состояние модели) и целевой (с предыдущим состоянием модели).
  • Для тех, кто предпочитает первый вариант, JPA Buddy включает уже упомянутый конструктор журналов изменений.

Второй вариант, по-видимому, является наиболее часто используемым. Итак, мы сравниваем две базы данных. Целевую базу данных относительно легко получить, например, мы можем просто создать дамп производственной среды. Проблемы возникают с исходной базой данных. Давайте начнем с небольшой проблемы: может случиться так, что база данных, используемая для разработки на ноутбуке разработчика, не относится к тому же типу СУБД, что и производственная. Что ж, это можно решить, например, запустив MS SQL в Docker на Mac. Более серьезная вещь заключается в том, что трудно найти “чистую” исходную базу данных, поскольку она обычно формируется во время разработки генератором схемы гибернации. Часто это приводит к куче мусорных таблиц и атрибутов, которые в конечном итоге появляются в рабочей базе данных. Чтобы избежать такого мусора, вам нужно будет потратить еще час или два на проверку схемы вашей базы данных, прежде чем запускать генерацию журналов изменений.

JPA Buddy предлагает замечательную функцию создания журналов изменений напрямую путем сравнения ваших объектов JPA с целевой базой данных (или моментальным снимком целевой базы данных). Вы можете запустить H2 в целях разработки и по-прежнему предоставлять правильный список изменений для Oracle, MS SQL или чего-либо еще, что вы используете в производстве. Это гарантирует, что если у вас есть мусор в журналах изменений, то это именно тот мусор, который есть в вашем исходном коде. Все, что вам нужно, – это поддерживать чистоту вашей модели данных и быть уверенным, что миграция не приведет к появлению нежелательных артефактов в рабочей базе данных.

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

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

Вы сами решаете, как разделить такие утверждения: поместить их в отдельные журналы изменений или просто пометить их каким-либо ярлыком или контекстом.

Вывод

В этой статье представлен обзор самого первого выпуска JPA Buddy . Очевидно, что, как и в случае с любым совершенно новым продуктом, он не может избежать некоторых проблем и дефектов. Сегодня основное внимание уделяется совершенствованию существующей функциональности, выявлению и внедрению важных функций, которых нам не хватает. Прямо говоря, мы хотели бы вдохновить вас стать ранним приверженцем и сформировать первоначальное сообщество энтузиастов. Установите JPA Buddy, попробуйте его и поделитесь своими отзывами с командой разработчиков – это очень поможет направить продукт в правильном направлении!

Оригинал: “https://dev.to/aleksey/jpa-goes-even-easier-with-its-buddy-1l6n”