JavaRush /Java Blog /Random EN /Spring is not scary, we continue to fill the database
Павел
Level 11

Spring is not scary, we continue to fill the database

Published in the Random EN group
CONTENT OF THE ARTICLE CYCLE We take the project from the previous parts and continue to work on it. Let's add a new Provider (supplier) to the existing Fruit entity. On ProviderEntity we will hang another annotation from the lombok @Accessors(chain = true) , it allows you to automatically generate setters that return this instead of void and call them in the style of the builder. Also hang this annotation on FruitEntity In the entities package, create a new class
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;

}
We also create according to the already familiar scheme: 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 ProviderService;
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();
    }
}
Let's make filling the base more interesting. Go to utility class
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 {

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

    }
}
Thanks to @Accessors(chain = true) we can fill (initialize) the List as follows: Try not to copy it, but write it by hand, and then understand it:
List<FruitEntity> fruit = new ArrayList<>(   //тут создаем обычный ArrayList
               Arrays.asList(                              //здесь мы создаем обертку, которая превращает список an objectов FruitEntity в List
                       new FruitEntity()                 //создаем экземпляр класса FruitEntity
                               .setFruitName("Fruit1")       //через сеттеры заполняем поля сущности
                               .setProviderCode(1)
               )
       );
without @Accessors(chain = true) it would be like this
List<FruitEntity> fruit = new ArrayList<>();
        FruitEntity fruitEntity = new FruitEntity();
        fruitEntity.setFruitName("Fruit1");
        fruitEntity.setProviderCode(1);
        fruit.add(fruitEntity);;
It seems that there is not a big difference, there are lines and there are five lines, but what if you need to add twenty pieces of objects to the sheet? Such a footcloth would turn out! It is not small anyway, we look, read, copy InitiateUtils which should be
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);
        }
    }
}
Let's run and see: Fruit table 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) Provider table ProviderEntity(id=1, providerName=Provider1) ProviderEntity(id= 2, providerName=Provider2) ProviderEntity(id=3, providerName=Provider3) ProviderEntity(id=4, providerName=Provider4) ProviderEntity(id=5, providerName=Provider5) Further we will make queries to the database more difficult, for this it would be good to understand SQL . Next article
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION