JavaRush /Java Blogu /Random-AZ /Bahar qorxulu deyil, bir sözlə: Lombok
Павел
Səviyyə

Bahar qorxulu deyil, bir sözlə: Lombok

Qrupda dərc edilmişdir
MƏQALƏLƏR DÖVRÜNÜN MÜNDƏRİCASI Vikipediyadan bir az: Lombok (indon dilindən Lombok - “çili bibəri”) İndoneziyanın bir hissəsi olan Kiçik Sunda adaları qrupunda Malay arxipelaqında adadır. Lombok Java proqramlaşdırma dili üçün məşhur kitabxanaya verilən addır. Ad seçimi Lombok adasının Yava adasından o qədər də uzaqda olmaması və həmçinin, görünür, adının mənası "çili bibəri" ilə əlaqədardır, çünki kitabxana insanlar üçün faydalı "ədviyyat" verir. dil. Bunu daha yaxşı deyə bilməzsiniz və sözlərin nə faydası var, gəlin bunu hərəkətdə görək: Plugini quraşdırın. Pom faylının <dependencies> blokuna bir asılılıq əlavə edin:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Budur: Əvvəlki məqalədəki layihəni açın, FruitEntity sinfini açın .
package ru.java.rush.entities;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Entity
@Table(name = "fruit_table")
public class FruitEntity {

    @Id
    @Column(name = "id_fruit")
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    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 FruitEntity setId(Integer id) {
    this.id = id;
    return this;
}

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;
}

@Override
public String toString() {
    return "FruitEntity{" +
            "id=" + id +
            ", fruitName='" + fruitName + '\'' +
            ", providerCode=" + providerCode +
            '}';
}
Bir az uzun, elə deyilmi? Gəlin Lombokdan @Data annotasiyasını sinfə əlavə edək və onun kodu necə qısaltdığını görək.
package ru.java.rush.entities;

import lombok.Data;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Data//annotation сгенирует при компиляции необходимый code
@Entity
@Table(name = "fruit_table")
public class FruitEntity {

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

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

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

//и все! Весь остальной code будет сгенирован Ломбоком
Layihəni işə salın, hər şeyin işlədiyini yoxlayın. İndi Lombok istifadə edərək asılılığı necə yeridə biləcəyinizi görək. Nümunə olaraq FruitService sinfini açaq , @RequiredArgsConstructor-u sinfə əlavə edək və konstruktoru sinifdən çıxaraq; artıq bizə lazım deyil.
package ru.java.rush.services;

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

import java.util.List;


@Service
@RequiredArgsConstructor//annotation от Ломбок
public class FruitService {

    private final FruitRepository fruitRepository;

//здесь когда то был конструктор

    public Optional<FruitEntity> getById(Integer id) {
        return fruitRepository.findById(id);
    }

    public void delById(Integer id) {
        fruitRepository.deleteById(id);
    }

    public Boolean exist(Example<? extends FruitEntity> example) {
        return fruitRepository.exists(example);
    }

    public void save(FruitEntity fruitEntity) {
        fruitRepository.save(fruitEntity);
    }

    public List<FruitEntity> getAll() {
        return fruitRepository.findAll();
    }

    public void saveAll(List<FruitEntity> fruits) {
        fruitRepository.saveAll(fruits);
    }
İndi InitiateUtils sinfində lazımsız kodlardan xilas olmaq üçün eyni üsuldan istifadə edin. Hər şeyin işlədiyini yoxlayın. Bu layihə irəlilədikcə biz daha bir neçə yeni Lombok annotasiyasından istifadə edirik. UPD: Denis Ryabçikovdan yaxşı şərh "Müəssisə üçün @Data-dan istifadə etməmək, onu @Setter və @Getter ilə əvəz etmək daha yaxşıdır, çünki @Data həmçinin toString() və hashCode() funksiyasını ləğv edir və problem yarana bilər. müəssisənin kolleksiyaları və digər qurumlarla əlaqələri olacaqsa, hash kodu." Prinsipcə, hamısı budur, burada Lombok haqqında bir məqalə var , annotasiyaların təsvirinə baxın: @Data, @Value, @RequiredArgsConstructor və @Builder. Bu yazıda @ Accessors haqqında oxuyun, məqalə ingilis dilindədir, lakin səhifənin tərcüməçisi bunu yaxşı idarə edə bilər, mənasını başa düşə bilərsiniz. Növbəti məqalədə verilənlər bazasını doldurmağa davam edəcəyik.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION