- •Цель работы
- •Теоретическая часть
- •Слоистая архитектура
- •Ключевые понятия
- •Ход выполнения работы
- •Часть 0. Подготовка
- •Часть 1. Подключение Spring Data JPA и PostgreSQL
- •Часть 2. Создание сущностей и перечислений
- •2.1. Создайте перечисления NotificationChannel и NotificationStatus
- •2.2. Создайте сущность User
- •2.3. Создайте сущность Notification
- •Часть 3. Создание DTO и репозиториев
- •3.1. DTO для User
- •3.2. DTO для Notification
- •3.3. Создайте репозитории
- •Часть 4. Реализация CRUD для User
- •4.1. Создайте UserService
- •4.2. Создайте UserController
- •Часть 5. Реализация CRUD для Notification
- •5.1. Создайте NotificationService
- •5.2. Создайте NotificationController
- •5.3. Проверьте работу CRUD-операций для Notification
- •Часть 6. Методы репозитория Spring Data JPA
- •6.1. Запрос по нескольким параметрам
- •6.2. Сортировка в имени метода
- •6.3. Использование @Query
- •Часть 7. Транзакции
- •Часть 8. Проверка работы приложения в Postman
- •Часть 9. Валидация данных
- •Самостоятельные задания
- •Контрольные вопросы
Лабораторная работа №4
Разработка веб-приложения на Spring Boot. Работа с данными
Цель работы
Научиться работать с данными в Spring Boot-приложении с использованием Spring Data JPA и Hibernate: подключать приложение к базе данных PostgreSQL, создавать JPA-сущности и репозитории, реализовывать базовые CRUD-операции, настраивать связи между таблицами, использовать транзакции, валидировать входные данные и обрабатывать ошибки.
Теоретическая часть
Spring Data JPA — это модуль Spring, который упрощает работу с данными и позволяет взаимодействовать с базой данных через интерфейсы репозиториев. Вместо написания большого количества шаблонного кода разработчик описывает сущности и создает интерфейсы, наследуемые от JpaRepository , а Spring автоматически предоставляет готовую реализацию базовых операций.
Hibernate — это ORM-фреймворк, реализующий спецификацию JPA. Он отвечает за отображение Java-объектов на таблицы базы данных, формирование SQL-запросов, работу со связями между сущностями и участие в транзакциях.
В данной лабораторной работе будет использоваться приложение системы уведомлений spring-lab3-notifications , разработанное ранее. Теперь вместо имитации слоя данных приложение будет работать с реальной базой данных PostgreSQL.
Слоистая архитектура
•@Controller — принимает HTTP-запросы и возвращает ответы
•@Service — содержит бизнес-логику
•@Repository — выполняет операции доступа к данным
Ключевые понятия
•Entity — класс, связанный с таблицей базы данных
•Repository — интерфейс доступа к данным
•JPA — спецификация для работы с ORM в Java
•Hibernate — реализация JPA
•Transaction — группа операций, которая должна выполниться целиком или не выполниться вовсе
•Validation — проверка корректности входных данных до их сохранения
Ход выполнения работы
Часть 0. Подготовка
1. Убедитесь, что у вас установлены:
1
2.IntelliJ IDEA
3.PostgreSQL
4.DBeaver
5.Postman
6.Используйте существующий проект spring-lab3-notifications .
7.Создайте базу данных PostgreSQL для проекта в DBeaver:
8.откройте DBeaver;
9.нажмите New Database Connection;
10.выберите PostgreSQL;
11.укажите параметры подключения к вашему серверу PostgreSQL;
12.после подключения создайте новую базу данных spring_lab3_notifications через интерфейс DBeaver.
13.Проверьте, что база данных создана и доступна для подключения.
Часть 1. Подключение Spring Data JPA и PostgreSQL
1.Добавьте в pom.xml зависимости для работы с Spring Data JPA, PostgreSQL, Lombok и валидацией:
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2
Роль каждой зависимости:
• spring-boot-starter-data-jpa — подключает Spring Data JPA и Hibernate. Эта зависимость позволяет работать с JPA-сущностями, создавать интерфейсы репозиториев, использовать JpaRepository , а также автоматически формировать SQL-запросы через
Hibernate.
•postgresql — JDBC-драйвер PostgreSQL. Он нужен приложению для подключения к внешней базе данных PostgreSQL.
•lombok — библиотека для сокращения шаблонного кода. С ее помощью можно
автоматически генерировать геттеры, сеттеры, конструкторы, builder и другие вспомогательные элементы.
•spring-boot-starter-validation — подключает Bean Validation. Эта зависимость нужна для проверки входных данных через аннотации @NotBlank , @NotNull , @Email ,
@Pattern и другие.
•Вынесите параметры подключения к базе данных в переменные окружения. Например, в
.env :
DB_URL=${yourHost}
DB_USERNAME=${yourUserName}
DB_PASSWORD=${yourPassword}
Чтобы значения из .env корректно использовались при запуске приложения, настройте их в
IntelliJ IDEA:
•откройте Run → Edit Configurations;
•выберите конфигурацию запуска вашего Spring Boot-приложения;
•найдите раздел Environment variables;
•добавьте туда переменные DB_URL , DB_USERNAME , DB_PASSWORD или подключите
.env , если используете соответствующий плагин;
• сохраните изменения и запускайте приложение через эту конфигурацию.
Без этого Spring Boot не сможет получить значения переменных окружения, и подключение к базе данных завершится ошибкой.
1. В файле application.properties добавьте:
spring.datasource.url=${DB_URL} spring.datasource.username=${DB_USERNAME} spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true
3
