«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:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Эта зависимость включает JPA API, реализацию JPA, JDBC и другие необходимые библиотеки. Поскольку реализацией JPA по умолчанию является Hibernate, этой зависимости на самом деле достаточно, чтобы включить ее.
Наконец, мы будем использовать H2 в качестве очень легкой базы данных для этого примера: ввод наших данных. Давайте продолжим и включим его в application.properites:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Это все, что нам нужно было настроить, чтобы включить Hibernate и H2 для нашего примера. Мы можем проверить, что конфигурация была успешной в журналах при запуске приложения Spring Boot: Version}
spring.h2.console.enabled=true
HHH000400: Использование диалекта: org.hibernate.dialect.H2Dialect
Теперь мы можем получить доступ к консоли H2 на локальном хосте: http://localhost:8080/h2-console/.
4. Создание объекта
Чтобы убедиться, что наш H2 работает правильно, мы сначала создадим объект JPA в новой папке моделей:
Теперь у нас есть базовый объект, который H2 можно создать таблицу из. Перезапустив приложение и проверив консоль H2, будет создана новая таблица с именем Book.
Чтобы добавить некоторые начальные данные в наше приложение, нам нужно создать новый файл SQL с некоторыми операторами вставки и поместить его в нашу папку ресурсов. Мы можем использовать файлы import.sql (поддержка Hibernate) или data.sql (поддержка Spring JDBC) для загрузки данных.
Вот наш пример данных:
Опять же, мы можем перезапустить приложение Spring Boot и проверить консоль H2 — данные теперь находятся в таблице Book.
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String name;
// standard constructors
// standard getters and setters
}
5. Создание репозитория и сервиса
Мы продолжим создавать базовые компоненты, чтобы протестировать наше приложение. Во-первых, давайте добавим репозиторий JPA в новую папку репозиториев:
Мы можем использовать интерфейс JpaRepository из среды Spring, который обеспечивает реализацию по умолчанию для основных операций CRUD.
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');
Далее добавим BookService в новую папку сервисов:
Чтобы протестировать наше приложение, нам нужно убедиться, что созданные данные могут быть получены из метода list() сервиса.
Мы напишем следующий SpringBootTest:
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
Запустив этот тест, мы можем убедиться, что Hibernate создает данные книги, которые затем успешно извлекаются нашей службой. Вот и все, Hibernate работает с Spring Boot.
6. Имя таблицы в верхнем регистре
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public List<Book> list() {
return bookRepository.findAll();
}
}
Иногда нам может понадобиться, чтобы имена таблиц в нашей базе данных были записаны в верхнем регистре. Как мы уже знаем, по умолчанию Hibernate будет генерировать имена таблиц строчными буквами.
Мы также можем попытаться явно указать имя таблицы, например:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceUnitTest {
@Autowired
private BookService bookService;
@Test
public void whenApplicationStarts_thenHibernateCreatesInitialRecords() {
List<Book> books = bookService.list();
Assert.assertEquals(books.size(), 3);
}
}
Однако это не сработает. Что работает, так это установка этого свойства в application.properties:
В результате мы можем проверить в нашей базе данных, что таблицы успешно созданы с заглавными буквами.
7. Заключение
«В этой статье мы рассмотрели, как легко интегрировать Hibernate с Spring Boot. Мы использовали базу данных H2 как очень легкое решение в памяти.
@Entity(name="BOOK")
public class Book {
// members, standard getters and setters
}
Мы привели полный пример приложения, использующего все эти технологии, а также дали небольшую подсказку, как сделать имена таблиц в нашей базе данных заглавными.
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Как всегда, все фрагменты кода, упомянутые в этой статье, можно найти в нашем репозитории GitHub.
«
In this article, we looked at how easy it is to integrate Hibernate with Spring Boot. We used the H2 database, as a very lightweight in-memory solution.
We gave a full example of an application, which uses all these technologies and eventually, we also gave a small hint on how to set the table names in uppercase in our database.
As always, all of the code snippets mentioned in this article can be found on our GitHub repository.