Spring Lessons. Интегрируем Hibernate.

Часто сложность предметной области и большое количество связей между таблицами заставляет вас либо вручную создавать огромные запросы с множеством JOIN‘ов либо перейти к использованию одной из существующих реализаций ORM. И в этом уроке мы начнем использовать Hibernate в Spring.

В качестве тестового примера у нас будет довольно простая модель предметной области — книги и их авторы(для упрощения считаем, что у каждой книги может быть только один автор):

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

JPA и Hibernate.

Hibernate очень сильно повлиял на развитие спецификации JPA в JavaEE. И в реализации JPA было многое позаимствовано из Hibernate. Напомним, что JPA — это спецификация, описывающая стандартный API объектно-реляционного отображения(ORM). При этом реализацию можно легко подменить, используя любой понравившийся вам поставщик постоянства(persistence provider), коим является Hibernate.

Есть два способа определения отображения таблицы на сущностный класс Java — XML(файл persistence.xml) и  аннотации. Мы воспользуемся вторым способом.

Но перед началом работы добавим следующие зависимости в наш проект:

Entity.

Ключевым понятием в JPA является сущность. Сущность — это обычный POJO-класс в вашем приложении, который сохраняется в базу данных. Чтобы сделать класс видимым для поставщика постоянства и настроить отображение, достаточно использовать набор простых аннотаций(get и set-методы опущены для наглядности):

Аннотация @Entity говорит о том, что данный класс является сущностью и должен отслеживаться поставщиком постоянства. Аннотация @Table задает таблицу, в которую будет отображаться эта сущность.

@Id и @GeneratedValue задают поле, которое является первичным ключом и стратегию генерации этого ключа(в данном случае это AUTO).

Аннотация @Column позволяет настроить отображение конкретных столбцов базы данных в отображаемую сущность.

Аннотация @JoinColumn задает внешний ключ — в нашем случае author_id.

@ManyToOne задает тип связи между таблицами — один человек может выступать автором нескольких книг.

Класс, описывающий авторов:

Session.

Основной интерфейс в Hibernate, с которым мы будем взаимодействовать — Session. Session предоставляет возможность выполнять запросы к базе данных и получать результаты в виде наших сущностей. Для получения самого интерфейса Session нам нужна фабрика — SessionFactory, настройкой которой мы сейчас и займемся в Spring.

Вот так выглядит мой файл конфигурации Spring:

Первым дело я определяю источник данных и настройки подключения к моей базе.

SessionFactory я конфигурирую при помощи встроенного класса LocalSessionFactoryBean, передавая ему ссылку на DataSource, имя директории, где будут храниться все классы сущностей, а также настройки для самого Hibernate.

Класс DAO мы реализуем чуть ниже, ему для создания и  выполнения запросов к базе данных также понадобится объект SessionFactory.

 

Пишем DAO.

Теперь давайте создадим свой класс DAO, в котором выполним запросы к базе при помощи Hibernate.

Реализация:

Первым делом инжектируем фабрику сеансов Hibernate при помощи аннотации @Resource. В методе insert() мы получаем объект Session вызовом метода getCurrentSession() и создаем запрос с именованными параметрами. Метод executeUpdate() интерфейса Query непосредственно выполнит созданный запрос.

Остальные методы мы оставляем в качестве домашнего задания.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *