JavaRush /Blog Java /Random-VI /Tóm lại mùa xuân không đáng sợ: Lombok
Павел
Mức độ

Tóm lại mùa xuân không đáng sợ: Lombok

Xuất bản trong nhóm
NỘI DUNG CHU KỲ BÀI VIẾT Một chút về Wikipedia: Lombok (Lombok từ tiếng Indonesia - “ớt”) là một hòn đảo thuộc Quần đảo Mã Lai, thuộc nhóm Quần đảo Sunda Nhỏ, một phần của Indonesia. Lombok là tên được đặt cho một thư viện phổ biến dành cho ngôn ngữ lập trình Java. Việc lựa chọn tên này là do đảo Lombok không quá xa đảo Java và dường như cũng có ý nghĩa của tên "ớt", vì thư viện cung cấp "gia vị" hữu ích cho ngôn ngữ. Bạn không thể nói hay hơn, còn công dụng của từ ngữ là gì, hãy cùng xem nó hoạt động như thế nào: Cài đặt plugin. Thêm phần phụ thuộc vào khối <dependency> của tệp pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Chúng ta bắt đầu: Mở dự án từ bài viết trước , mở lớp 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 +
            '}';
}
Hơi dài phải không? Hãy thêm chú thích @Data từ Lombok vào lớp và xem nó rút ngắn mã như thế nào.
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 будет сгенирован Ломбоком
Chạy dự án, kiểm tra xem mọi thứ có hoạt động không. Bây giờ hãy xem cách bạn có thể thêm phần phụ thuộc bằng Lombok. Hãy mở lớp FruitService làm ví dụ , đính kèm @RequiredArgsConstructor vào lớp và xóa hàm tạo khỏi lớp; chúng ta không cần nó nữa.
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);
    }
Bây giờ hãy sử dụng phương pháp tương tự để loại bỏ mã không cần thiết trong lớp InitiateUtils. Kiểm tra xem mọi thứ có hoạt động không. Khi dự án này tiến triển, chúng tôi đang sử dụng thêm một số chú thích Lombok mới. CẬP NHẬT: Nhận xét hay từ Denis Ryabchikov "Đối với một thực thể, tốt hơn là không sử dụng @Data mà thay thế nó bằng @Setter và @Getter, vì @Data cũng ghi đè toString() và hashCode() và các vấn đề có thể phát sinh với mã băm nếu thực thể sẽ có các bộ sưu tập và mối quan hệ với các thực thể khác." Về nguyên tắc thì chỉ vậy thôi, đây là một bài viết trên Lombok , xem phần mô tả các chú thích: @Data, @Value, @RequiredArgsConstructor và @Builder. Trong bài viết này bạn đọc về @Accessors , bài viết bằng tiếng Anh nhưng người dịch trang có thể xử lý tốt, bạn có thể hiểu được ý nghĩa. Trong bài viết tiếp theo chúng ta sẽ tiếp tục điền vào cơ sở dữ liệu.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION