1. Обзор
В этой статье мы рассмотрим, как использовать Spring Boot с Hibernate.
Мы создадим простое приложение Spring Boot и посмотрим, насколько легко интегрировать его с Hibernate.
2. Загрузка приложения
Мы будем использовать Spring Initializr для начальной загрузки нашего приложения Spring Boot. В этом примере мы будем использовать только необходимые конфигурации и зависимости для интеграции Hibernate, добавив Web , JPA, и H2 зависимости. Мы объясним эти зависимости в следующем разделе.
Давайте создадим проект и откроем его в нашей среде IDE. Мы можем проверить созданную структуру проекта и определить файлы конфигурации, которые нам понадобятся.
Вот как будет выглядеть структура проекта:
3. Зависимости Maven
Если мы откроемся pom.xml , мы увидим, что у нас есть spring-boot-starter-web и spring-boot-starter-test в качестве зависимостей maven. Как следует из их названий, они запускают зависимости в Spring Boot.
Давайте быстро взглянем на зависимость, которая тянет за собой JPA:
org.springframework.boot spring-boot-starter-data-jpa
Эта зависимость включает в себя API JPA, реализацию JPA, JDBC и другие необходимые библиотеки. Поскольку реализация JPA по умолчанию-Hibernate, этой зависимости на самом деле достаточно, чтобы включить ее.
Наконец, мы будем использовать H2 в качестве очень легкой базы данных для этого примера:
com.h2database h2 runtime
Мы можем использовать консоль H2, чтобы проверить, что база данных запущена и работает, а также для удобного графического интерфейса для ввода данных. Давайте продолжим и включим его в application.properties :
spring.h2.console.enabled=true
Это все, что нам нужно было настроить, чтобы включить Hibernate и H2 для нашего примера. Мы можем проверить, что конфигурация была успешной в журналах, когда мы запускаем приложение Spring Boot:
HHH000412: Ядро гибернации {#Версия}
HHH000206: hibernate.свойства не найдены
HCANN000001: Hibernate Commons Аннотации {#Версия}
HHH000400: Использование диалекта: org.hibernate.dialect.H2Dialect
Теперь мы можем получить доступ к консоли H2 на локальном хосте: http://localhost:8080/h2-console/ .
4. Создание сущности
Чтобы убедиться, что наш H2 работает правильно, мы сначала создадим объект JPA в новой папке models :
@Entity public class Book { @Id @GeneratedValue private Long id; private String name; // standard constructors // standard getters and setters }
Теперь у нас есть базовая сущность, из которой H2 может создать таблицу. Перезапустив приложение и проверив консоль H2, будет создана новая таблица с именем Book .
Чтобы добавить некоторые исходные данные в наше приложение, нам нужно создать новый файл SQL с некоторыми инструкциями insert и поместить его в нашу папку resources . Мы можем использовать файлы import.sql (поддержка гибернации) или data.sql (поддержка Spring JDBC) для загрузки данных.
Вот наши примеры данных:
insert into book values(1, 'The Tartar Steppe'); insert into book values(2, 'Poem Strip'); insert into book values(3, 'Restless Nights: Selected Stories of Dino Buzzati');
Опять же, мы можем перезапустить приложение Spring Boot и проверить консоль H2 – данные теперь находятся в таблице Book .
5. Создание Репозитория и Сервиса
Мы продолжим создавать базовые компоненты для тестирования нашего приложения. Во-первых, давайте добавим репозиторий JPA в новую папку repositories :
@Repository public interface BookRepository extends JpaRepository{ }
Мы можем использовать интерфейс JpaRepository из Spring framework, который обеспечивает реализацию по умолчанию для основных операций CRUD .
Далее, давайте добавим сервис Book в новую папку services :
@Service public class BookService { @Autowired private BookRepository bookRepository; public Listlist() { return bookRepository.findAll(); } }
Чтобы протестировать наше приложение, нам нужно проверить, что созданные данные могут быть извлечены из метода list() службы.
Мы напишем следующее Spring Boot Test :
@RunWith(SpringRunner.class) @SpringBootTest public class BookServiceUnitTest { @Autowired private BookService bookService; @Test public void whenApplicationStarts_thenHibernateCreatesInitialRecords() { Listbooks = bookService.list(); Assert.assertEquals(books.size(), 3); } }
Запустив этот тест, мы можем проверить, что Hibernate создает данные Book , которые затем успешно извлекаются нашей службой. Вот и все, Hibernate работает с Spring Boot.
6. Имя таблицы в верхнем Регистре
Иногда нам может потребоваться, чтобы имена таблиц в нашей базе данных были написаны прописными буквами. Как мы уже знаем, по умолчанию Hibernate будет генерировать имена таблиц строчными буквами .
Мы также могли бы попытаться явно задать имя таблицы, например:
@Entity(name="BOOK") public class Book { // members, standard getters and setters }
Однако это не сработает. Что работает, так это установка этого свойства в application.properties :
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
В результате мы можем проверить в нашей базе данных, что таблицы успешно созданы с прописными буквами.
7. Заключение
В этой статье мы рассмотрели, как легко интегрировать Hibernate с Spring Boot. Мы использовали базу данных H2 в качестве очень легкого решения в памяти.
Мы привели полный пример приложения, которое использует все эти технологии, и в конечном итоге у нас также есть небольшая подсказка о том, как установить имена таблиц в верхнем регистре в нашей базе данных.
Как всегда, все фрагменты кода, упомянутые в этой статье, можно найти в нашем репозитории GitHub .