一般來說我們建立一個實體像是以下
@Entity
public class Product {
private Long id;
private Integer price;
private String name;
public Product() {
}
public Product(String name, int price) {
this.name = name;
this.price = price;
}
...
}
建立好之後,我們要讓它被存取,因此都會使用 get、set 方式進行設定,當然還有建構方法甚至是 toString 這些很常的被使用,因此程式碼有很多時間都在做這些事,不僅是代碼過於冗長甚至浪費一些精力在這個地方。透過 Lombok 工具可以省下一些精力。
maven 引用 Lombok 方式
<dependencies>
...
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
透過 @Getter @Setter @NoArgsConstructor 這些 Lombok 注釋讓我們輕鬆許多
@Entity
@Getter // 所有屬性都設置 get
@Setter // 所有屬性都設置 set
@NoArgsConstructor // 無參構造函式
@AllArgsConstructor // 全參構造函式
@ToString // 建構 toString
public class Product {
// 有了 Lombok 注釋,程式碼更簡潔
private Long id;
private Integer price;
private String name;
}
假設我們從 client 請求獲取數據,但其數據需要經過一些處裡才能被儲存至 DB 中,在被儲存在 DB 中我們的實體會被建構。但這件構過程中需要 new 出物件,並使用 set 方式將這個實體組成一個能被 DB 儲存的物件。就像以下
Product product = new Product();
product.setPrice(100);
product.setName("Apple");
但藉由 Lombok 中 @Builder 注釋我們可以更簡潔更容易閱讀
Product product = Product.builder()
.price(100)
.name("Apple")
.build();
假設有一個實體屬性是 List 類型,我們可以透過 @Singular 注釋進行建構,如下
@Entity
@Getter // 所有屬性都設置 get
@Setter // 所有屬性都設置 set
@NoArgsConstructor // 無參構造函式
@AllArgsConstructor // 全參構造函式
public class Product {
// 有了 Lombok 注釋,程式碼更簡潔
private Long id;
private Integer price;
private String name;
@Singular("tag")
private List<String> tags;
}
我們建構數據的時候可以有以下效果
Product product = Product.builder()
.price(100)
.name("Apple")
.tag("eat") // this
.tag("health") // this
.build();
Lombok 還有滿多有趣的用法像是以下
public class Test {
...
@EqualsAndHashCode(onlyExplicitlyIncluded = true) // 覆寫 quals 和 HashCode
public static class GroupBy {
@EqualsAndHashCode.Include
private String brand;
@EqualsAndHashCode.Include
private String model;
@EqualsAndHashCode.Include
private int year;
}
}
反正學不完...,繼續加油吧!!