Перейти к основному содержимому

Весенняя загрузка со спящим режимом

· 4 мин. чтения

1. Обзор

В этом руководстве мы узнаем, как использовать Spring Boot с Hibernate.

Мы создадим простое приложение Spring Boot и продемонстрируем, как легко его интегрировать с Hibernate.

2. Начальная загрузка приложения

Мы будем использовать Spring Initializr для начальной загрузки нашего приложения Spring Boot. В этом примере мы будем использовать только необходимые конфигурации и зависимости для интеграции Hibernate, добавив зависимости Web , JPA и H2 . Мы объясним эти зависимости в следующем разделе.

Теперь сгенерируем проект и откроем его в нашей IDE. Мы можем проверить сгенерированную структуру проекта и определить файлы конфигурации, которые нам понадобятся.

Вот как будет выглядеть структура проекта:

./b00a7240f655891c06ff687df0b6dee1.png

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 .