JavaRush /Java Blog /Random-TW /簡而言之,春天並不可怕:龍目島
Павел
等級 11

簡而言之,春天並不可怕:龍目島

在 Random-TW 群組發布
文章週期的內容 維基 百科的一點內容: 龍目島(龍目島來自印度尼西亞語 - “辣椒”)是馬來群島的一個島嶼,屬於小巽他群島,屬於印度尼西亞的一部分。Lombok 是 Java 程式語言的一個流行函式庫的名稱。之所以選擇這個名字,是因為龍目島距離爪哇島並不遠,而且,顯然,它的名字的意思是“辣椒”,因為圖書館為龍目島提供了有用的“調味料”。語言。說得再好不過了,言語有什麼用,讓我們看看它的實際效果: 安裝插件。 將依賴項新增至 pom 檔案的 <dependencies> 區塊中:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
讓我們開始吧:打開上一篇文章 中的項目,打開類別 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 +
            '}';
}
有點長,不是嗎?讓我們將 Lombok 中的 @Data 註解加入到類別中,看看它如何縮短程式碼。
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 будет сгенирован Ломбоком
運行項目,檢查一切是否正常。現在讓我們看看如何使用 Lombok 注入相依性。讓我們打開類別 FruitService作為範例,將 @RequiredArgsConstructor 附加到該類別並從該類別中刪除建構函數;我們不再需要它。
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);
    }
現在使用相同的方法刪除 InitiateUtils 類別中不必要的程式碼。檢查一切是否正常。隨著該專案的進展,我們正在使用更多新的 Lombok 註釋。UPD:Denis Ryabchikov 的好評論「對於實體,最好不要使用 @Data,而是用 @Setter 和 @Getter 替換它,因為 @Data 也會覆蓋 toString() 和 hashCode(),並且可能會出現問題如果實體將具有與其他實體的集合和關係,則哈希代碼。” 原則上就這些了,這裡有一篇關於Lombok的文章,看一下註解的說明:@Data、@Value、@RequiredArgsConstructor和@Builder。在這篇文章中,閱讀了 @Accessors,文章是英文的,但是頁面翻譯器可以很好地處理它,你可以理解其中的含義。 下一篇文章我們將繼續填充資料庫。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION