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

Раздел: Spring Boot

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

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

Создание 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
мин.

Similar Articles Icon
Divider

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

13
мин.

Similar Articles Icon
Divider

Docker Hub: назначение и использование

17
мин.

Similar Articles Icon