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>
Эта зависимость включает API JPA, реализацию JPA, JDBC и другие необходимые библиотеки. Поскольку реализацией JPA по умолчанию является Hibernate, этой зависимости на самом деле достаточно, чтобы включить ее.
Наконец, мы будем использовать H2
в качестве очень легкой базы данных для этого примера:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Мы можем использовать консоль H2, чтобы проверить, что БД запущена и работает, а также для удобного графического интерфейса для ввода наших данных. Мы продолжим и включим его в application.properites
:
spring.h2.console.enabled=true
Это все, что нам нужно настроить, чтобы включить Hibernate и H2 в наш пример. Мы можем проверить, что конфигурация была успешной в журналах, когда мы запускаем приложение Spring Boot:
HHH000412: Ядро гибернации {#Версия}
HHH000206: hibernate.properties не найден
HCANN000001: Аннотации Hibernate Commons {#Version}
HHH000400: Использование диалекта: org.hibernate.dialect.H2Dialect
Теперь мы можем получить доступ к консоли H2 на локальном хосте http://localhost:8080/h2-console/
.
4. Создание объекта
Чтобы убедиться, что наш H2 работает правильно, мы сначала создадим объект JPA в новой папке моделей :
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String name;
// standard constructors
// standard getters and setters
}
Теперь у нас есть базовая сущность, из которой H2 может создать таблицу. Перезапустив приложение и проверив консоль H2, будет создана новая таблица с именем Book
.
Чтобы добавить некоторые исходные данные в наше приложение, нам нужно создать новый файл SQL с некоторыми операторами вставки и поместить его в нашу папку ресурсов .
Мы можем использовать файлы import.sql
(поддержка Hibernate) или 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 в новую папку репозиториев :
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
Мы можем использовать интерфейс JpaRepository
из среды Spring, который обеспечивает реализацию по умолчанию для основных операций CRUD .
Далее мы добавим BookService
в новую папку сервисов :
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public List<Book> list() {
return bookRepository.findAll();
}
}
Чтобы протестировать наше приложение, нам нужно убедиться, что созданные данные могут быть получены из метода list() службы.
Мы напишем следующий SpringBootTest
:
@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);
}
}
Запустив этот тест, мы можем убедиться, что Hibernate создает данные книги
, которые затем успешно извлекаются нашей службой. Вот и все, 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 .