文章週期的內容 維基 百科的一點內容: 龍目島(龍目島來自印度尼西亞語 - “辣椒”)是馬來群島的一個島嶼,屬於小巽他群島,屬於印度尼西亞的一部分。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,文章是英文的,但是頁面翻譯器可以很好地處理它,你可以理解其中的含義。 下一篇文章我們將繼續填充資料庫。
GO TO FULL VERSION