Рубрики
Без рубрики

Весенняя загрузка с гибернацией

Быстрое и практичное введение в интеграцию Spring Boot и Hibernate/JPA.

Автор оригинала: baeldung.

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 List list() {
        return bookRepository.findAll();
    }
}

Чтобы протестировать наше приложение, нам нужно проверить, что созданные данные могут быть извлечены из метода list() службы.

Мы напишем следующее Spring Boot Test :

@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceUnitTest {

    @Autowired
    private BookService bookService;

    @Test
    public void whenApplicationStarts_thenHibernateCreatesInitialRecords() {
        List books = 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 .