Создание Spring Boot Data CRUD-приложения
Last updated: 12 мая 2025 г.Создадим CRUD
приложение, только теперь с использованием Spring Boot Data.
Создадим новое Spring Boot приложение с такими папками и файлами.

Содержимое файлов в этом crud приложении ничем не отличается от содержимого предыдущего crud приложения, которое мы создавали в прошлом уроке за исключением файла класса сервиса.
Также можно заметить, что DAO интерфейс и класс исчезли, а вместо них появился файл ActorRepository
. Давайте же разберемся почему.
До сего момента мы делали Crud операции, только над актером.
А что если в нашем приложении нам придется совершать CRUD операции не только с ним, а и с другими сущностями?
Получается придется для каждой сущности писать DAO интерфейс и его реализацию с почти одинаковыми CRUD методами.
Spring Data избавит нас от этой головной боли!
Благодаря Spring Data, дао классы вообще не пишутся. Вместо этого для каждой сущности пишется один единственный интерфейс, наследующий от другого интерфейса, он называется JpaRepository<[сюда передаем имя класса сущности], [сюда тип ID сущности]>
(ниже пример), а методы для простых CRUD операций уже реализованы за нас и мы просто используем их в сервисе. То есть Spring Data фактически дарит нам методы для работы с БД и вручную, как раньше, их писать не нужно.
Также JpaRepository
предоставляет нам и другие методы, здесь посмотрим только CRUD.
1package com.SpringBootApps.firstSpringBootCRUDApp.dao;
2
3import java.util.List;
4
5//Вот интерфейс о котором мы говорили.
6//Для каждой другой сущности пишется подобный.
7//Класс таблицы actor это Actor, а тип id в этой таблице как мы
8//помним это Integer. Поэтому передаем эти данные в JpaRepository.
9public interface ActorRepository extends JpaRepository<Actor, Integer> {
10 //А здесь, если для сущности актер нужны только самые
11 //обычные Crud операции, можно даже ничего не писать!!!
12 //Но обычно здесь пишутся методы со специальным именем
13 //чтобы делать особенные запросы к таблице с актерами.
14}
Теперь давайте же воспользуемся этими подаренными Spring Data методами для совершения crud операций в сервисном классе.
1package com.SpringBootApps.firstSpringBootDataCRUDApp.service;
2
3import java.util.List;
4
5import org.springframework.beans.factory.annotation.Autowired;
6import org.springframework.stereotype.Service;
7import org.springframework.transaction.annotation.Transactional;
8
9import com.SpringBootApps.firstSpringBootDataCRUDApp.models.Actor;
10import com.SpringBootApps.firstSpringBootDataCRUDApp.repositories.ActorRepository;
11
12import java.util.Optional;
13
14@Service
15public class ServiceInterfaceImpl implements ServiceInterface {
16 //Внедряем созданный интерфейс (вернее бин, который будет
17 //создан на основе этого интерфейса за кулисами средствами
18 //Spring Boot). Где-то там за кулисами ясное дело спринг
19 //берет созданный нами интерфейс ActorRepository, реализует
20 //его (то есть реализует методы, которые наш интерфейс
21 //наследовал от интерфейса JpaRepository) и внедряет
22 //объект(бин) реализованного класса сюда.
23 @Autowired
24 private ActorRepository actorRepository;
25
26
27 @Transactional
28 public Actor getActor(int actorID) {
29 //.findById() – дается нам БЕСПЛАТНО!
30 //То есть нам не нужно создавать метод для взаимодействия
31 //с БД вручную как мы это делали раньше.
32 Optional<Actor> actor = actorRepository.findById(actorID);
33 //Немного об Optional. Здесь вам просто нужно знать что
34 //в Optional объекте может оказаться либо пустота либо
35 //извлеченный по Id актер. Не будем углубляться. Optional
36 //это просто дополнительная страховка на случай того
37 //если actorRepository.findById(actorID) вернет null.
38 if(actor.isPresent()) { //Если не пустая возвращаем актера.
39 return actor.get();
40 }
41
42 return null;//иначе null
43 }
44
45
46 @Transactional
47 public void saveActor(Actor actor) {
48 //.save() – БЕСПЛАТНО!
49 actorRepository.save(actor);
50 }
51
52 @Transactional
53 public List<Actor> getListOfActors() {
54 //.findAll() – БЕСПЛАТНО!
55 return actorRepository.findAll();
56 }
57
58 @Transactional
59 public void deleteActor(int actorid) {
60 //.deleteById() – БЕСПЛАТНО!
61 actorRepository.deleteById(actorid);
62 }
63}
Давайте протестируем данное Crud приложение.
В таблице actor сейчас три актера:

Для примера давайте протестируем обработчик getActors
, который выбирает всех актеров из таблицы.

Как видим, все актеры были выбраны обработчиком getActors
из БД успешно. Это значит, что подаренный Spring Data метод findAll()
работает.
Следующие уроки
Создание Spring Boot Data Rest CRUD-приложения
19
мин.
Что такое Docker и зачем он нужен?
13
мин.
Docker Hub: назначение и использование
17
мин.