JavaRush /Java блог /Random UA /Spring - це не страшно, продовжуємо наповнювати БД
Павел
11 рівень

Spring - це не страшно, продовжуємо наповнювати БД

Стаття з групи Random UA
ЗМІСТ ЦИКЛУ СТАТЕЙ Беремо проект із попередніх частин і продовжуємо над ним працювати. Додамо до існуючої сутності Fruit (фрукти) нову Provider (постачальник). На ProviderEntity повісимо ще одну інструкцію від ломбока @Accessors(chain = true) , вона дозволяє автоматично згенерувати сеттери, які повертають це замість void і викликати їх у стилі білдера. Також повісьте цю інструкцію на FruitEntity B пакеті entities створюємо новий клас
import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Accessors(chain = true) //зачем она нужна увидим позже
@Entity
@Data
@Table(name = "provider_table")
public class ProviderEntity {

    @Id
    @Column(name = "id_provider")
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    private Integer id;

    @Column(name = "provider_name")
    private String providerName;

}
Також за вже знайомою схемою створюємо: interface ProviderRepositiry;
package ru.java.rush.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ru.java.rush.entities.ProviderEntity;

@Repository
public interface ProviderRepository extends JpaRepository<ProviderEntity,Integer> {
}
class ProviderServise;
package ru.java.rush.services;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.java.rush.entities.ProviderEntity;
import ru.java.rush.repositories.ProviderRepository;

import java.util.List;

@Service
@RequiredArgsConstructor
public class ProviderService {

    private final ProviderRepository providerRepository;

    public void saveAll(List<ProvidErentity> providerEntity){
        providerRepository.saveAll(providerEntity);
    }

    public void save(ProviderEntity providerEntity){
        providerRepository.save(providerEntity);
    }

    public List<ProviderEntity> getAll(){ //аналогично добавте метод поиска getAll() в сервис фруктов
       return providerRepository.findAll();
    }
}
Зробимо наповнення бази цікавішим. Переходимо до класу утиліти
package ru.java.rush.utils;

import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;
import ru.java.rush.services.FruitService;

@Service
@RequiredArgsConstructor
public class InitiateUtils implements CommandLineRunner {

    private final FruitService fruitService;

    @Override
    public void run(String... args) throws Exception {

        //здесь будем много писать

    }
}
Завдяки @Accessors(chain = true) ми можемо заповнити (проініціалізувати) List наступним чином: Спробуйте це не копіювати, а написати руками, а потім зрозуміти:
List<FruitEntity> fruit = new ArrayList<>(   //тут создаем обычный ArrayList
               Arrays.asList(                              //здесь мы создаем обертку, которая превращает список об'єктов FruitEntity в List
                       new FruitEntity()                 //создаем экземпляр класса FruitEntity
                               .setFruitName("Fruit1")       //через сеттеры заполняем поля сущности
                               .setProviderCode(1)
               )
       );
без @Accessors(chain = true) це було б так
List<FruitEntity> fruit = new ArrayList<>();
        FruitEntity fruitEntity = new FruitEntity();
        fruitEntity.setFruitName("Fruit1");
        fruitEntity.setProviderCode(1);
        fruit.add(fruitEntity);;
Начебто і не велика різниця, там рядків і тут п'ять рядків, але що якщо потрібно внести двадцять штук об'єктів у аркуш? Така б онуча вийшла! Вона і так не маленька, дивимося, читаємо, копіюємо InitiateUtils який має бути
package ru.java.rush.utils;

import ...;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;


@Service
@RequiredArgsConstructor
public class InitiateUtils implements CommandLineRunner {

    private final FruitService fruitService;
    private final ProviderService providerService;


    @Override
    public void run(String... args) throws Exception {
//инициализируем таблицу с фруктами
        List<FruitEntity> fruit = new ArrayList<>(
                Arrays.asList(
                        new FruitEntity()
                                .setFruitName("Fruit1")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),//сюда добавлен метод рандомного числа от 0 до 10
                        new FruitEntity()
                                .setFruitName("Fruit2")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit3")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit4")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit5")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit6")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit7")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit8")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10)),
                        new FruitEntity()
                                .setFruitName("Fruit9")
                                .setProviderCode(Math.abs(new Random().nextInt() % 10))
                )
        );

//инициализируем таблицу с поставщиками
        List<ProviderEntity> provider = new ArrayList<>(
                Arrays.asList(
                        new ProviderEntity()
                                .setProviderName("Provider1"),
                        new ProviderEntity()
                                .setProviderName("Provider2"),
                        new ProviderEntity()
                                .setProviderName("Provider3"),
                        new ProviderEntity()
                                .setProviderName("Provider4"),
                        new ProviderEntity()
                                .setProviderName("Provider5")
                )
        );

       fruitService.saveAll(fruit);//сохраняем List фруктов

        System.out.println("\nТаблица фруктов");
        for (FruitEntity fruitEntity : fruitService.getAll()) {
            System.out.println(fruitEntity);
        }

        providerService.saveAll(provider);//сохраняем List поставщиков

        System.out.println("\nТаблица поставщиков");
        for (ProviderEntity providerEntity : providerService.getAll()) {
            System.out.println(providerEntity);
        }
    }
}
Давайте запустимо і дивимося: Таблиця фруктів FruitEntity(id=1, fruitName=Fruit1, providerCode=2) FruitEntity(id=2, fruitName=Fruit2, providerCode=8) FruitEntity(id=3, fruitName=Fruit3, providerCode=4 FruitEntity(id=4, fruitName=Fruit4, providerCode=7) FruitEntity(id=5, fruitName=Fruit5, providerCode=9) FruitEntity(id=6, fruitName=Fruit6, providerCode=2) FruitEntity(id=7, fruitName= Fruit7, providerCode=6) FruitEntity(id=8, fruitName=Fruit8, providerCode=5) FruitEntity(id=9, fruitName=Fruit9, providerCode=6) Таблиця постачальників ProviderEntity(id=1, providerName=Provider1) Provider 2, providerName=Provider2) ProviderEntity(id=3, providerName=Provider3) ProviderEntity(id=4, providerName=Provider4) ProviderEntity(id=5, providerName=Provider5) Далі робитимемо запити до БД по складніше, для цього добре б розуміти SQL . Наступна стаття
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ