Постоянное хранение данных с помощью JPA

10.06.2022 1394
IBS Training Center Telegram
Подписывайтесь на наш канал в Telegram:
больше материалов экспертов, анонсы бесплатных вебинаров и задачки для IT-специалистов
Подписаться

Приложение JPA

Сегодня мы напишем приложение JPA для сохранения записи в базе данных и ее извлечения. А сделаем это на машине, на которой выполняется код, установлены MySQL Release 8.0 и база данных с именем CSCS.

Начнем с настройки JPA, Hibernate и других необходимых зависимостей. Исходный код контролируется Apache Maven. Мы декларируем следующие зависимости:


Листинг 1. Зависимости Maven от Hibernate, JUnit Jupiter и MySQL:

JPA скриншот №1

 

Модуль hibernate-entitymanager содержит транзитивные зависимости от других модулей, которые нам понадобятся, таких как hibernate-core заглушки интерфейса JPA.

Нам потребуется зависимость junit-jupiter-engine для выполнения тестов JUnit 5, а также зависимость mysql-connector-java, официальный драйвер JDBC для MySQL.

Вставляем в наш код блок постоянного хранения. Он содержит параметры настройки, в том числе провайдера персистентности, сведения о подключаемой базе данных, классы сущностей, используемый диалект SQL, учетные данные, форматирование SQL и др. Для приложений JPA требуется один или несколько блоков постоянного хранения.

 

Блок постоянного хранения

Файл persistence.xml находится в resources/META-INF/. Его содержимое выглядит следующим образом:


Листинг 2. Файл конфигурации persistence.xml

JPA скриншот №2.png


  • Поскольку JPA — это только спецификация, нам необходимо указать связанную с вендором реализацию PersistenceProvider для API. Определяемая нами персистентность поддерживается провайдером Hibernate. #1
  • Указываем свойства JDBC properties - драйвер #2, URL базы данных #3, имя пользователя #4 и пароль #5 для доступа. На машине, на которой выполняются программы, установлена база данных MySQL 8, и для доступа используются учетные данные из файла persistence.xml.
  • Диалект Hibernate — MySQL8 #6, так как мы будем взаимодействовать с базой данных MySQL Release 8.0.
  • Каждый раз, когда выполняется программа, база данных создается заново с нуля #7. Это идеально для автоматизированного тестирования, когда нам для запуска каждого теста нужна чистая база данных.

 

Персистентный класс

Реализуемое приложение имеет персистентный класс Item:



Листинг 3. Класс Item

JPA скриншот №3.png


  • Для персистентных классов необходимо использовать аннотацию @Entity #1, чтобы указать, что они соответствуют таблице базы данных. Если имя таблицы не указано, этот класс будет по умолчанию отображаться на таблицу с именем ITEM.
  • Для персистентных классов необходимо использовать аннотацию @Id #2, чтобы указать соответствие первичному ключу таблицы базы данных. Этот атрибут будет отображаться на столбец ID.
  • Аннотация @GeneratedValue указывает на автоматическую генерацию первичных ключей #3. Здесь можно использовать самые разные стратегии в зависимости от базы данных: поля идентификации, значения, полученные от последовательности, или таблица.
  • Атрибуты будут отображаться в столбцы таблицы. Если имя столбца не указано, атрибут info #4 будет по умолчанию отображаться в столбец с именем INFO.


Сохранение и извлечение записей

Давайте сохраним новую запись в базу данных.

 

Листинг 4. Класс ItemJPATest

JPA скриншот №4.png


  • Для доступа к базе данных #1 нам нужна фабрика EntityManagerFactory. Эта фабрика соответствует блоку постоянного хранения, который мы определили ранее.
  • Создаем EntityManager и запускаем новую сессию базы данных #2.
  • Получаем доступ к API для стандартных транзакций и начинаем транзакцию #3.
  • Создаем новый экземпляр класса Item и устанавливаем его свойство info #4.
  • Экземпляр класса во временном состоянии становится персистентным на стороне контекста персистентности #5.
  • Подтверждаем транзакцию #6. Теперь в таблицу ITEM добавлен новый ряд. Доступ к базе данных должен быть транзакционным, даже если она только для чтения.
  • После создания EntityManager его необходимо закрыть #7.
  • После создания EntityManagerFactory его необходимо закрыть #8.
  • В приложении JPA нет кода SQL и не используется JDBC. В коде Java нет операций CRUD (create, read, update, delete), но можно работать объектно-ориентированным способом с классами, объектами и методами. Перевод на каждый диалект SQL осуществляется посредством объектно-реляционного отображения (ORM), которое также используется для переносимости.

Интересно и программирование с помощью Java или хотите прокачать свои навыки? Регистрируйтесь на наши тренинги и получите скидку 10% для всех физлиц!

 




Расскажи друзьям:

Как не пропустить самое интересное?
Подписывайтесь на наш ежемесячный дайджест!
Спасибо.
Вы подписаны на ежемесячный дайджест.
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.