Пролетен обувка с хибернация

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 

Тази зависимост включва JPA API, JPA Implementation, JDBC и други необходими библиотеки. Тъй като внедряването на JPA по подразбиране е Hibernate, тази зависимост всъщност е достатъчна, за да се включи и тя.

И накрая, ще използваме H2 като много лека база данни за този пример:

 com.h2database h2 runtime 

Можем да използваме конзолата H2, за да проверим дали БД работи и работи, също и за удобен за потребителя GUI за въвеждане на данни. Нека да продължим и да го активираме в application.properites :

spring.h2.console.enabled=true

Това е всичко, което ни трябваше да конфигурираме да включва Hibernate и H2 за нашия пример. Можем да проверим дали конфигурацията е била успешна в дневниците, когато стартираме приложението Spring Boot:

HHH000412: Hibernate Core {#Version}

HHH000206: hibernate.properties не са намерени

HCANN000001: Анотации на Hibernate Commons {#Version}

HHH000400: Използване на диалект: org.hibernate.dialect.H2Dialect

Вече имаме достъп до конзолата H2 на localhost: // 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 (поддръжка на хибернация) или data.sql (пролетна поддръжка на 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 { }

Можем да използваме интерфейса JpaRepository от Spring framework, който осигурява изпълнение по подразбиране за основните CRUD операции.

След това нека добавим BookService в нова папка с услуги :

@Service public class BookService { @Autowired private BookRepository bookRepository; public List list() { return bookRepository.findAll(); } }

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

Ще напишем следния SpringBootTest :

@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 създава данните от Книгата, които след това се извличат успешно от нашата услуга. Това беше всичко, Hibernate работи с Spring Boot.

6. Име на главна таблица

Sometimes we may need to have the table names in our database written in uppercase letters. As we already know, by default Hibernate will generate the names of the tables in lowercase letters.

We could also try to explicitly set the table name, like this:

@Entity(name="BOOK") public class Book { // members, standard getters and setters }

However, that wouldn't work. What works is setting this property in application.properties:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

As a result, we can check in our database that the tables are created successfully with uppercase letters.

7. Conclusion

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.

Дадохме пълен пример за приложение, което използва всички тези технологии и в крайна сметка също дадохме малък намек за това как да зададем имената на таблиците с главни букви в нашата база данни.

Както винаги, всички кодови фрагменти, споменати в тази статия, могат да бъдат намерени в нашето хранилище на GitHub.