Данный проект представляет собой веб-приложение, имитирующее работу электронной библиотеки, позволяющее просматривать, создавать, редактировать сущности Person и Book, а так же выстраивать отношения между ними - назначать владельца книги или освобождать книгу.
Данный проект представляет собой веб-приложение на Java, использующий Spring Framework в качестве основы. Приложение построено с использованием архитектурного паттерна MVC (Model-View-Controller). Для взаимодействия с клиентской частью реализован архитектурный стиль REST API, обеспечивающий взаимодейтсвие через CRUD операции. Для хранения и обработки данных использована СУБД Postgresql, взаимодействие с ней реализовано с помощью паттерна DAO (Data Transfer Object). Валидация данных (Встроенная через аннотации (@Valid) и кастомная (Spring Valiador)).
- REST – API (взаимодействие через HTTP методы CRUD (create, read, update, delete):
- MVC (Model-View-Controller) – реализован через модуль Spring MVC:
- Контроллеры (
@Controller) обрабатывают запросы, отвечают за навигацию. - Модель (сущности
Person,Book). - Представление (Thymeleaf-шаблоны) рендерит HTML.
- Контроллеры (
- DAO (Data Access Object) – работа с БД через обёртку JDBC API
JdbcTemplateс классамиPersonDAOиBookDAO, инкапсулирующие логику взаимодействия с БД.
- Spring Framework – основа приложения:
- Spring Core (DI, IoC) – управление зависимостями (
@Autowired,@Component,@Bean). - Spring MVC – обработка HTTP-запросов (
@GetMapping,@PostMapping,@PatchMapping,@DeleteMapping). - Spring JDBC – работа с БД (
JdbcTemplate). - Spring Validation – валидация данных (
@Valid,@Size,@NotNull), а так же кастомная валидация через интерфейсValidator.
- Spring Core (DI, IoC) – управление зависимостями (
- Thymeleaf – шаблонизация HTML.
- PostgreSQL – реляционная СУБД для хранения данных.
- JDBC API + JdbcTemplate – обёртка над JDBC API для удобного и безопасного (обеспечивается использованием PreparedStatement) выполнения SQL-запросов. Применялись базовые запросы, а так же join`ы для работы со связанными таблицами с отношением (One to Many).
- Валидация – встроенная (
@Valid,@Email) и кастомная (через реализацию интерфейсаValidator).
| Категория | Технологии / Компоненты |
|---|---|
| Backend | Java, Spring (Core, MVC, JDBC, Validation) |
| Frontend | Thymeleaf (рендеринг HTML на сервере) |
| База данных | PostgreSQL, Spring JDBC (JdbcTemplate) |
| API | REST (CRUD: GET, POST, PUT, DELETE) |
| Валидация | Bean Validation (jakarta.validation), Validator (org.springframework.validation.Validator) |
Продолжение mvc приложения, описанного выше, содержащее улучшения путем внедрения новых технологий.
Улучшение project1 путем замены логики взаимодейтсвия с данными (реализация паттерна Repository с помощью Spring Data JPA, внедрение Hibernate) добавлена новая валидация сущностей, добавлен сервисный слой (@Servise). Добавлен новый функионал:
- Поиск книги
- Разбиение списка книг на страницы
- Сортировка по году
- Упрощена работа с данными путем внедрения паттерна
Repository(Реализован с помощьюSpring Data Jpa). Теперь в коде нет SQL запросов для базовых операций, что упрощает работу. - Добавлена связка сущностей(
@Entity) и базы данных с помощью Hibernate. Теперь таблицы связаны с java-объектами. - Добавлен сервисный слой (
@Servise), для управления бизнес логикой и транзакциями. Контроллеры содержат минимум кода и вся работа инкапсулирована именно в сервисном слое - Добавлена новая кастомная валидация с использованием интерфейса
Validator. (Теперь нельзя ввести год, который превышает текущий, валидация имен стала более жесткой)
Итоговый продукт представляет собой многослойное Spring MVC-приложение с REST API, реализующее паттерны Repository и DAO (хотя последний не используется в финальной версии), где работа с данными организована через Spring Data JPA и Hibernate ORM с поддержкой транзакций (@Transactional), базовых и кастомных SQL-запросов, а также связью таблиц БД (PostgreSQL) с Java-объектами. Сервисный слой инкапсулирует бизнес-логику, контроллеры обрабатывают HTTP-запросы, используется двухуровневая валидация (на стороне БД и на стороне сервера), что в совокупности образует четко структурированную архитектуру с разделением ответственности между слоями (Controller-Service-Repository).