Топ-100Создание Spring Boot CRUD-приложения - CodOrbits
LogoCodOrbits

Раздел: Spring Boot

Раздел посвящён Spring Boot — инструменту для быстрой и простой разработки Spring-приложений с минимальной настройкой.

Все разделы
Иконка Spring Boot

Создание Spring Boot CRUD-приложения

Last updated: 12 мая 2025 г.

Создадим Spring Boot Crud приложение. Это приложение будет предоставлять ту же функциональность, что и предыдущее CRUD приложение. То есть между клиентом и сервером будет происходить обмен JSON файлами с помощью REST.

Создадим новое Spring Boot приложение с такими папками и файлами.

Здесь содержимое всех файлов идентично предыдущему CRUD приложению, которое разбиралось в разделе “Spring MVC CRUD”, за исключением pom, содержимое которого идентично файлу pom предыдущего урока в этом разделе, DAO класса и файла настроек application.propreties.

В application.propreties находятся самые основные настройки, а именно данные для подключения к БД и настройка корневого пути.

1server.servlet.context-path=/firstSpringBootCRUDApp
2spring.datasource.url=jdbc:mysql://localhost/storage
3spring.datasource.username=root
4spring.datasource.password=07998MSD
5spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Помните в MVC приложении с использованием Hibernate мы в applicationContext.xml определяли бины DataSource и SessionFactory?

Spring Boot создает эти бины автоматически и нам не приходиться писать весь код этих бинов, где легко допустить ошибку. Нам просто нужно написать данные бд (database-url, login, password) в application.properties.

Также важно упомянуть, что теперь вместо бина SessionFactory создается и внедряется в ДАО класс бин EntityManager.

EntityManagerэто тот же самый SessionFactory, только как-бы обертка над ним (то есть добавляет доп функциональность SessionFactory).

Чтобы узнать какая это функциональность копнем чуть глубже.

Что такое JPA? Это стандарт для реализации фреймворков по типу Hibernate, то есть фреймворков для связывания таблиц БД и объектов. Да, существует не только Hibernate.

JPA это набор интерфейсов (под интерфейсом имеется ввиду ООП интерфейс, то есть тот интерфейс, который реализуют классы).

Фреймворки по типу Hibernate реализуют эти интерфейсы (то есть классы фреймворка Hibernate реализуют набор JPA интерфейсов).

И благодаря EntityManager можно легко переходить с одной реализации этих JPA интерфейсов на другую почти ничего не меняя в программе.

То есть без удобных средств Spring Boot нам пришлось бы вручную переконфигурировать весь проект, чтобы, например, перейти с Hibernate на, например, стандартную реализацию JPA

Взглянем как через EntityManger можно преходить между реализациями ничего не меняя в проекте.

Ниже в одном и том же DAO классе используется и Hibernate и стандартная JPA реализация.

И это благодаря EntityManager, в обычном не Spring Boot приложении такое не было бы возможно. Ну или правильнее сказать, такое очень сложно было бы настроить вручную.

1package com.SpringbootApps.firstSpringBootCRUDApp.Dao;
2
3import java.util.List;
4
5
6import org.springframework.stereotype.Repository;
7
8@Repository
9public class ActorDAOImpl implements ActorDAO {
10
11	// Внедряем EntityManager
12	@Autowired
13	private EntityManager entityManager;
14
15	public Actor getActor(int actorId) {
16		// Извлекаем новую Hibernate session также
17		// как это делали через sessionFactory
18		// в прошлых Crud приложениях,
19		// только в данном случае
20		// из entityManager и другим методом.
21		Session session = entityManager.unwrap(Session.class);
22		return session.get(Actor.class, actorId);
23	}
24
25	public List<Actor> getListOfActors() {
26		// А здесь давайте воспользуемся стандартной
27		// реализацией JPA. То есть это не Hibernate.
28		// Как видим сессии нет. Со стандартной реализацией
29		// работаем прямо через entityManager.
30		return entityManager.createQuery("from Actor").getResultList();
31	}
32
33	public void saveActor(Actor actor) {
34		Session session = entityManager.unwrap(Session.class);
35		session.saveOrUpdate(actor);
36	}
37
38	public void deleteActor(int actorId) {
39		Session session = entityManager.unwrap(Session.class);
40		session.createQuery("delete from Actor "
41				+ "where id=:actorid").setParameter(
42				"actorid", actorId).executeUpdate();
43	}
44
45}

В таблице actor сейчас три актера:

Давайте получим их данные всех актеров в формате JSON через обработчик getActors. Этот обработчик извлекает актеров из БД помещает их в List и отправляет этот List с актерами в формате JSON. Отметим, что актеры, как мы только что видели в классе, извлекаются с помощью стандартной реализации JPA.

Обратимся к этому обработчику через Rest Client по ссылке /actors запросом GET. RestController распознает, что был сделан GET запрос и вызывает обработчик помеченный аннотацией GetMapping.

Как видим, List с объектами актеров из БД успешно пришел в формате JSON в ответ на GET запрос.

То есть мы успешно воспользовались стандартными реализациями JPA.

Теперь давайте протестируем какой-нибудь метод, который использует Hibernate реализации, чтобы убедиться, что разные реализации JPA могут быть использованы в одном проекте.

Давайте извлечем третьего актера с помощью обработчика getActor.

Как видим, всё прошло успешно. То есть обе реализации JPA могут одновременно использоваться в одном проекте благодаря EntityManager и конечно же Spring Boot.


Дополнительные материалы

Additional Material Icon

Следующие уроки

Создание Spring Boot Data CRUD-приложения

20
мин.

Similar Articles Icon
Divider

Создание Spring Boot Data Rest CRUD-приложения

19
мин.

Similar Articles Icon
Divider

Что такое Docker и зачем он нужен?

13
мин.

Similar Articles Icon