JavaRush /Java Blog /Random-ID /Musim semi tidak menakutkan, singkatnya: Lombok
Павел
Level 11

Musim semi tidak menakutkan, singkatnya: Lombok

Dipublikasikan di grup Random-ID
ISI SIKLUS ARTIKEL Sedikit Wikipedia: Lombok (Lombok dari bahasa Indonesia - “cabai”) adalah sebuah pulau di Kepulauan Melayu, dalam gugusan Kepulauan Sunda Kecil, bagian dari Indonesia. Lombok adalah nama yang diberikan untuk perpustakaan populer untuk bahasa pemrograman Java. Pemilihan nama tersebut karena letak Pulau Lombok yang tidak begitu jauh dari Pulau Jawa, dan rupanya juga memiliki arti nama "cabai", karena di perpustakaan tersebut terdapat "bumbu" yang bermanfaat bagi masyarakat. bahasa. Anda tidak bisa mengatakannya dengan lebih baik, dan apa gunanya kata-kata, mari kita lihat tindakannya: Instal plugin. Tambahkan ketergantungan ke blok <dependencies> pada file pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Ini dia: Buka proyek dari artikel sebelumnya , buka kelas FruitEntity .
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 +
            '}';
}
Agak lama, bukan? Mari tambahkan anotasi @Data dari Lombok ke kelas dan lihat cara mempersingkat kodenya.
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 будет сгенирован Ломбоком
Jalankan proyek, periksa apakah semuanya berfungsi. Sekarang mari kita lihat bagaimana Anda bisa menyuntikkan ketergantungan menggunakan Lombok. Mari kita buka kelas FruitService sebagai contoh , lampirkan @RequiredArgsConstructor ke kelas dan hapus konstruktor dari kelas; kita tidak lagi membutuhkannya.
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);
    }
Sekarang gunakan metode yang sama untuk menghilangkan kode yang tidak perlu di kelas InitiateUtils. Periksa apakah semuanya berfungsi. Seiring berjalannya proyek ini, kami menggunakan beberapa anotasi Lombok baru. UPD: Komentar bagus dari Denis Ryabchikov "Untuk suatu entitas, lebih baik tidak menggunakan @Data, tetapi menggantinya dengan @Setter dan @Getter, karena @Data juga mengesampingkan toString() dan hashCode(), dan masalah mungkin timbul dengan kode hash jika entitas akan memiliki koleksi dan hubungan dengan entitas lain." Pada prinsipnya itu saja, berikut artikel di Lombok , lihat deskripsi anotasinya: @Data, @Value, @RequiredArgsConstructor dan @Builder. Pada artikel ini , baca tentang @ Accessors , artikelnya dalam bahasa Inggris, tetapi penerjemah halaman dapat menanganinya dengan baik, Anda dapat memahami artinya. Pada artikel selanjutnya kita akan melanjutkan pengisian database.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION