JavaRush /Blog Jawa /Random-JV /Spring ora medeni, utawa carane isi database h2 (lan Hibe...
Павел
tingkat

Spring ora medeni, utawa carane isi database h2 (lan Hibernate sethitik)

Diterbitake ing grup
ISI SIKLUS ARTIKEL Kita nerusake proyek kita. Carane nggawe proyek web. Kita nyambungake database menyang proyek web kita . Wektu iki bakal ana luwih akeh huruf, kita ora bakal teka ing limang menit. Ing artikel pungkasan, aku menehi saran supaya maca sawetara kaca utawa sawetara artikel babagan Spring , utawa paling ora google babagan kacang buncis, konteks, entitas, injeksi dependensi ing Spring, cara kanggo ngatur kacang buncis. Yen ora, aku menehi saran supaya sampeyan nindakake saiki utawa sawise artikel iki. Sadurunge ngisi basis h2 kita. Sampeyan perlu kanggo nggawe kelas sarana kanggo mbukak cara kanggo ngisi database ing. Ing paket
ru.java.rush
Nggawe paket kanggo keperluan
utils
Lan utilitas dhewe:
package ru.java.rush.utils;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;

@Service //annotation помечает бин How сервис
public class InitiateUtils implements CommandLineRunner { //имплементируем интерфейс CommandLineRunner (командная строка запуска)

    @Override
//переопределяем метод который позволит
//нам выполнять методы нашего applications при запуске
    public void run(String... args) throws Exception {
        System.out.println("run"); //проверим что это работает
    }
}
Ayo mbukak aplikasi lan "mbukak" bakal ditampilake ing console . Kita butuh sarana iki minangka alternatif kanggo kelas Aplikasi, amarga mung kudu tanggung jawab kanggo mbukak aplikasi kasebut. Ayo nggawe entitas. Entitas minangka kacang sing tujuane kanggo nyimpen sawetara data. Ing paket
ru.java.rush
Nggawe paket kanggo entitas
entities
Lan hakekat dhewe, supaya dadi woh:
package ru.java.rush.entities;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Entity//помечаем бин How сущность
@Table(name = "fruit_table")//в этой аннотации можно указать Name создаваемой таблицы
public class FruitEntity {

    @Id//annotation из пакета avax.persistence.*, помечает поле How id
    @Column(name = "id_fruit")//в этой аннотации можно указать Name поля
    @GenericGenerator(name = "generator", strategy = "increment")//незаметно добрались до hibernate,
// здесь указывается что id будет автоматически увеличиваться при новых записях
    @GeneratedValue(generator = "generator")//annotation генерации id
    private Integer id;

    @Column(name = "fruit_name")
    private String fruitName;

    @Column(name = "provider_code")
    private Integer providerCode;

   //что бы в с классом можно было совершать манипуляции создается
  //пустой конструктор, геттеры, сеттеры и переопределяется метод toString()

  public FruitEntity(){ //пустой конструктор

 }

public Integer getId() {
    return id;
}

 //геттеры, сеттеры
public String getFruitName() {
    return fruitName;
}

public FruitEntity setFruitName(String fruitName) {
    this.fruitName = fruitName;
    return this;
}

public Integer getProviderCode() {
    return providerCode;
}

public FruitEntity setProviderCode(Integer providerCode) {
    this.providerCode = providerCode;
    return this;
}

//переопределяем toString()
@Override
public String toString() {
    return "FruitEntity{" +
            "id=" + id +
            ", fruitName='" + fruitName + '\'' +
            ", providerCode=" + providerCode +
            '}';
}
}
Konstruktor, getter, setter lan toString () ora kudu ditulis kanthi tangan; bisa digawe kanthi cepet . Oke, entitas kita sesambungan karo database lan nyimpen data saka database. Intine ana ing karya. Nanging wong kudu operate entitas ing aplikasi. Kanggo maksud iki padha teka munggah karo "gudang". Ing paket
ru.java.rush
Nggawe paket kanggo repositori
repositories
Lan gudang dhewe
package ru.java.rush.repositories;

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

@Repository//помечаем что этот бин - репозиторий
public interface FruitRepository extends JpaRepository<FruitEntity,Integer> {
//репозиторий является интерфейсом, который наследуется от другого интерфейса JpaRepository<>
//для него необходимо указать с Howой сущность он должен работать, у нас это FruitEntity
//и тип данных у поля id данной сущности, у нас это Integer
}
Pitakonan iku, kok awak antarmuka kosong, ora ana cara siji sing nyatakake? Kanggo njawab, tahan Ctrl lan klik ing JpaRepository lan deleng manawa dheweke entuk warisan saka PagingAndSortingRepository<t, ""> lan QueryByExampleExecutor<>, dheweke uga ngumumake sawetara metode. Aku ora bakal nyalin metode ing kene; goleki dhewe. Wiwit repositori minangka antarmuka, ora nindakake apa-apa, mung nyatakake metode, wong liya dibutuhake kanggo ngetrapake metode kasebut. Iki sebabe "layanan" diciptakake. Ing paket
ru.java.rush
Nggawe paket kanggo layanan
services
Lan layanan dhewe
package ru.java.rush.services;

import org.springframework.stereotype.Service;

@Service//помечаем что этот бин - сервис
public class FruitService {
}
Saiki kita wis tekan titik penting: "Carane lan ngapa nyuntikake kacang buncis" (nyuntikake ketergantungan). Yen sampeyan ora ngerti apa sing dakkarepake, mula aku njaluk sampeyan maca babagan topik iki, saiki utawa mengko, utamane menehi perhatian marang metode "injeksi", pira ana, sing luwih apik, sing luwih elek, lan kenapa. . Kita nggunakake salah sawijining cara. Kita butuh "layanan" supaya bisa disambungake menyang "gudang". Kita nambah layanan kita kanthi anotasi lan variabel.
package ru.java.rush.services;

import org.springframework.stereotype.Service;
import ru.java.rush.repositories.FruitRepository;

@Service
public class FruitService {

    private final FruitRepository fruitRepository;  //final переменная репозитория

public FruitService(FruitRepository fruitRepository) {//внедрor зависимость через конструктор
    this.fruitRepository = fruitRepository;
}

}
Saiki sampeyan bisa ngetrapake cara saka "gudang" Kita nambah "layanan"
package ru.java.rush.services;

import org.springframework.stereotype.Service;
import ru.java.rush.entities.FruitEntity;
import ru.java.rush.repositories.FruitRepository;

@Service
public class FruitService {

    private final FruitRepository fruitRepository;

public FruitService(FruitRepository fruitRepository) {//внедor зависимость
    this.fruitRepository = fruitRepository;
}

//создали публичный метод (название любое может быть)
//на вход принимает сущность и сохраняет ее в базу
    public void save(FruitEntity fruitEntity){
        fruitRepository.save(fruitEntity); //реализовали метод внедренного бина
    }

//возвращает лист всех сущностей из базы
    public List<FruitEntity> getAll(){
       return fruitRepository.findAll(); //реализовали метод внедренного бина
    }
}
Kabeh sing isih ana yaiku ngetrapake iki ing utilitas kita. Ayo pindhah menyang kelas InitiateUtils
package ru.java.rush.utils;


import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;
import ru.java.rush.entities.FruitEntity;
import ru.java.rush.services.FruitService;

import java.util.List;

@Service
public class InitiateUtils implements CommandLineRunner {

    private final FruitService fruitService;

public InitiateUtils (FruitService fruitService) {//незабываем конструктор для внедрения
    this. fruitService = fruitService;
}

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

//создаем несколько сущностей фруктов, через сеттеры заполняем поля
        FruitEntity fruitEntity1 = new FruitEntity();
        fruitEntity1.setFruitName("fruit1");
        fruitEntity1.setProviderCode(1);

        FruitEntity fruitEntity2 = new FruitEntity();
        fruitEntity2.setFruitName("fruit2");
        fruitEntity2.setProviderCode(2);

        FruitEntity fruitEntity3 = new FruitEntity();
        fruitEntity3.setFruitName("fruit3");
        fruitEntity3.setProviderCode(3);

//с помощью переменной сервиса вызываем методы сохранения в базу, по разу для одного an object
        fruitService.save(fruitEntity1);
        fruitService.save(fruitEntity2);
        fruitService.save(fruitEntity3);

//здесь вытаскиваем базу обратно
        List<FruitEntity> all = fruitService.getAll();

//и выводим что получилось
        for (FruitEntity entity : all) {
            System.out.println(entity);
        }
    }
}
Output konsol: FruitEntity(id=1, fruitName=fruit1, providerCode=1) FruitEntity(id=2, fruitName=fruit2, providerCode=2) FruitEntity(id=3, fruitName=fruit3, providerCode=3) Kene sampeyan bisa rampung . "Sedhela!" - sing maca sing paling ati-ati bakal nguwuh - "Nang endi Hibernate?" Lan Hibernate tumindak ing kene minangka pejuang ing ngarep sing ora katon; iku nindakake perkara sing penting banget: nggawe struktur database kanggo kita. Nalika kita nulis kolom ing "entitas" lan menehi tandha karo anotasi sing dibutuhake, Hibernate nindakake tugase. Nyatane, nalika ngembangake kanthi cepet, sampeyan ora bisa ngatasi struktur database; kabeh wis digawe lan disebarake kanggo sampeyan. Nanging ing proyek cilik kasebut, Hibernate kanthi kemampuan nggawe struktur database ora bisa diganti, mesthi, iki ora mung kauntungan, umpamane, apik kanggo nggawe entitas sing gegandhengan (ora bakal digunakake ing proyek iki). Ayo ngucapake salam marang buruh sing asor iki: pindhah menyang IDEA ing struktur proyek (ing sisih kiwa ana wit karo folder lan file), ing kana kita bakal nemokake Pustaka Eksternal, bukak lan deleng ing antarane perpustakaan liyane
Maven: org.hibernate.common:hibernate-commons-annotations:5.1.0.Final
Maven: org.hibernate.validator:hibernate-validator:6.0.17.Final
Maven: org.hibernate:hibernate-core:5.4.6.Final
Utamane, Hibernate diundhuh kanggo kita dening Maven lan
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Nyatane, Pak Hiber nindakake operasi rahasia liyane, nanging kita bakal ngomong babagan iki ing artikel sabanjure. Sing mesthi wae saiki. Minangka latihan ngleksanani, Aku suggest sampeyan ngleksanakake saveAll () cara kanggo FruitEntity dhewe , kang bakal nyimpen kabeh èntitas kanggo database ing siji wektu. Sabanjure, ayo dideleng carane nyepetake kode proyek nggunakake perpustakaan Lombok
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION