JavaRush /Java Blog /Random-TK /Bahar gorkunç däl, ýa-da h2 maglumat bazasyny nädip köpel...

Bahar gorkunç däl, ýa-da h2 maglumat bazasyny nädip köpeltmeli (we biraz Gibernate)

Toparda çap edildi
Makalalaryň sikliniň mazmuny Taslamamyzy dowam etdirýäris. Web taslamasyny nädip döretmeliMaglumatlar bazasyny web taslamamyz bilen baglanyşdyrýarys. Bu gezek has köp harp bolar, bäş minutdan geçip bilmeris. Iň soňky makalada, Bahar hakda birnäçe sahypany ýa-da birnäçe makalany ýa-da iň bolmanda google -yň noýbanyň nämedigi, konteksti, subýektleri, Baharda garaşlylyk sanjymy, noýba sazlamagyň usullary barada okamagyňyzy maslahat berdim. Notok bolsa, şu wagt ýa-da şu makaladan soň etmegi maslahat berýärin. H2 bazamyzy doldurmazdan ozal. Maglumatlar bazasyny doldurmagyň usullaryny işletmek üçin peýdaly synpy döretmeli. Bukjada
ru.java.rush
Kärhanalar üçin bukja döretmek
utils
Kärhananyň özi:
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"); //проверим что это работает
    }
}
Programmany işledeliň we "işlet" konsolda görkeziler . Programma synpyna alternatiwa hökmünde bu peýdaly zat gerek, sebäbi diňe programmanyň işe başlamagy üçin jogapkär bolmaly. Edaralary döredeliň. Edara, noýba bolup, maksady käbir maglumatlary saklamakdyr. Bukjada
ru.java.rush
Edaralar üçin bukja dörediň
entities
Esasy manysy bolsa, miwesi bolsun:
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, getterler, sazlaýjylar we toString () el bilen ýazylmaly däl, olar çalt döredilip bilner . Bolýar, biziň guramamyz maglumatlar bazasy bilen aragatnaşyk saklaýar we maglumatlar bazasyndan maglumatlary saklaýar. Esasy işde. Emma kimdir biri programmada edara işlemeli. Bu maksat bilen “ammar” tapdylar. Bukjada
ru.java.rush
Ammarlar üçin bukja döretmek
repositories
Ammaryň özi
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
}
Sorag, näme üçin interfeýsiň göwrümi boş, yglan edýän ýekeje usuly ýok? Jogap bermek üçin Ctrl basyp saklaň we JpaRepository-a basyň we onuň PagingAndSortingRepository <t, ""> we QueryByExampleExecutor <> -dan miras galanlygyny görüň, käbir usullary yglan edýärler. Usullary bu ýerde göçürip bilmerin, özüňizi gözläň. Ammar interfeýs bolany üçin, hiç zat etmeýär, diňe usullary yglan edýär, bu usullary durmuşa geçirmek üçin başga birine zerur. Şonuň üçin “hyzmat” oýlanyp tapyldy. Bukjada
ru.java.rush
Hyzmatlar üçin bukja döretmek
services
Hyzmatyň özi
package ru.java.rush.services;

import org.springframework.stereotype.Service;

@Service//помечаем что этот бин - сервис
public class FruitService {
}
Indi möhüm bir nokada ýetdik: “Fasuly nädip we näme üçin sanjym etmeli” (garaşlylygy sanjym). Näme diýjek bolýanyma düşünmeýän bolsaňyz, şu mowzukda şu wagt ýa-da soň okamagyňyzy haýyş edýärin, esasanam “sanjym” usullaryna, näçesiniň bardygyny, haýsysynyň gowudygyny, haýsysynyň erbetdigini we näme üçin üns bermegini haýyş edýärin. . Usullaryň birini ulanýarys. Bize “ammar” bilen nähilidir bir baglanyşyk üçin “hyzmat” gerek. Hyzmatymyzy düşündiriş we üýtgeýji bilen doldurýarys.
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;
}

}
Indi usuly “ammardan” durmuşa geçirip bilersiňiz, “hyzmaty” goşýarys
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(); //реализовали метод внедренного бина
    }
}
Galan zat muny muny peýdaly zatlarymyzda durmuşa geçirmekdir. Geliň, InitiateUtils synpyna geçeliň
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);
        }
    }
}
Konsol çykyşy: FruitEntity (id = 1, fruitName = fruit1, ProviderCode = 1) FruitEntity (id = 2, fruitName = fruit2, ProviderCode = 2) FruitEntity (id = 3, fruitName = fruit3, ProviderCode = 3) Bu ýerde gutaryp bilersiňiz . "Diňe bir sekunt!" - iň ünsli okyjy gygyrar - "Her niçigem bolsa Gibernate nirede?" Gibernate bu ýerde göze görünmeýän söweşiji hökmünde çykyş edýär, gaty möhüm bir zat etdi: bu biziň üçin maglumatlar binýadyny döretdi. “Edarada” meýdanlary ýazanymyzda we zerur düşündirişler bilen bellänimizde, Gibernate öz işini etdi. Aslynda, çybyn ösüp barýarka, maglumat bazasynyň gurluşy bilen iş salyşmagyňyz gaty ähtimal; hemme zat eýýäm dörediler we ýerleşdiriler. Suchöne şeýle kiçi taslamalarda maglumatlar bazasynyň gurluşlaryny döretmek ukyby bilen “Hibernate” -ni diňe çalşyp bolmaýar; elbetde, bu onuň ýeke-täk artykmaçlygy däl, mysal üçin, degişli guramalary döretmäge ökde (bu taslamada ulanmarys). Bu kiçigöwünli işgäre salam bereliň: taslama gurluşynda IDEA gidiň (çep tarapda bukjalar we faýllar bolan agaç bar), şol ýerde daşarky kitaphanalary taparys, açarys we beýleki kitaphanalaryň arasynda göreris
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
Hususan-da, Gibernate Maven we
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Aslynda jenap Hiber başga bir gizlin operasiýa etdi, ýöne indiki makalada bu barada gürleşeris. Elbetde, indi hemmesi. Okuw maşklary hökmünde, “FruitEntity” üçin saveAll () usulyny durmuşa geçirmegiňizi maslahat berýärin , bu ähli guramalary bir wagtyň özünde maglumatlar bazasyna ýazdyrar. Indiki, Lombok kitaphanasyny ulanyp, taslama koduny nädip gysgaltmalydygyna seredeliň
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION