JavaRush /Java blogi /Random-UZ /Bahor qo'rqinchli emas, qisqasi: Lombok

Bahor qo'rqinchli emas, qisqasi: Lombok

Guruhda nashr etilgan
MAQOLALAR SIKLINING MAZMUNI Vikipediyadan bir oz: Lombok (indon. Lombok — “chili qalampiri”) — Indoneziya tarkibidagi Kichik Sunda orollari guruhidagi Malay arxipelagidagi orol. Lombok Java dasturlash tili uchun mashhur kutubxonaga berilgan nom. Nomni tanlash Lombok oroli Yava orolidan unchalik uzoqda emasligi, shuningdek, uning nomi "chili qalampiri" ma'nosi bilan bog'liq, chunki kutubxona odamlar uchun foydali "ziravorlar" beradi. til. Siz buni yaxshiroq ayta olmadingiz va so'zlarning nima foydasi bor, keling, buni amalda ko'rib chiqaylik: plaginni o'rnating. Pom faylining <dependencies> blokiga qaramlikni qo'shing:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Mana biz boramiz: Oldingi maqoladan loyihani oching , FruitEntity sinfini oching .
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 oz uzun, shunday emasmi? Keling, Lombokdan @Data annotatsiyasini sinfga biriktiramiz va u kodni qanday qisqartirishini ko'ramiz.
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 будет сгенирован Ломбоком
Loyihani ishga tushiring, hamma narsa ishlayotganligini tekshiring. Keling, Lombok yordamida qanday qilib qaramlikni kiritish mumkinligini ko'rib chiqaylik. Misol tariqasida FruitService sinfini ochamiz , sinfga @RequiredArgsConstructor ni biriktiramiz va konstruktorni sinfdan olib tashlaymiz; bizga endi kerak emas.
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);
    }
Endi InitiateUtils sinfidagi keraksiz koddan xalos bo'lish uchun xuddi shu usuldan foydalaning. Hamma narsa ishlayotganligini tekshiring. Ushbu loyiha davom etar ekan, biz yana bir nechta yangi Lombok izohlaridan foydalanmoqdamiz. UPD: Denis Ryabchikovdan yaxshi mulohazalar: "Shu jumladan, @Data dan foydalanmaslik, balki uni @Setter va @Getter bilan almashtirgan ma'qul, chunki @Data toString() va hashCode() ni ham bekor qiladi va muammolar paydo bo'lishi mumkin. agar korxona to'plamlari va boshqa sub'ektlar bilan aloqalari bo'lsa, xesh kodi." Printsipial jihatdan, hammasi shu, bu erda Lombok haqidagi maqola , izohlarning tavsifiga qarang: @Data, @Value, @RequiredArgsConstructor va @Builder. Ushbu maqolada @ Accessors haqida o'qing , maqola ingliz tilida, lekin sahifa tarjimoni buni yaxshi hal qila oladi, siz ma'nosini tushunishingiz mumkin. Keyingi maqolada biz ma'lumotlar bazasini to'ldirishni davom ettiramiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION