1. 場景
都說咧,Spring Boot就是為簡化Spring開發而生,Boot麼,快速啟動,哪裡不夠快,就幹倒它!這不是口号,Spring Boot就是這麼幹哩。
那現在仔細瞅瞅,我們的項目還有什麼重複代碼?毫無技術含量,都是簡單的邏輯重複。看看我們的資料對象DO
/**
* 部落格類
*/
public class BlogDo {
/**
* 序号
*/
private Long id;
* 标題
private String title;
* 内容
private String content;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
public String getTitle() {
return title;
public void setTitle(String title) {
this.title = title;
public String getContent() {
return content;
public void setContent(String content) {
this.content = content;
}
有沒有發現get/set方法,完全是固定模式的,隻要屬性名确定了,方法怎麼寫也就确定了。
而且我們平時寫的時候,一般也不用自己手寫,直接利用開發工具生成就行。既然是模闆代碼,何必浪費手工生成的時間。
使用Lombok,即可幫我們自動生成get/set模闆代碼,而且它還能做到更多!
2. 安裝Lombok
首先下載下傳lombok jar包,點此打開下載下傳頁
點選圖中jar下載下傳即可
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZzkTOhlDOhRTM2kTM2IWOlF2M0YWYjhTZ5MWNhljN58CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
下載下傳之後輕按兩下打開,點選
Specify Location
然後選擇eclipse安裝目錄下的eclipse.exe,然後點選Install即可。
注意安裝完了需要重新開機下eclipse。
3. 引入Lombok
安裝完了還需要引入Lombok,哈哈,針對開發工具安裝一次就夠了,然後每個項目需要單獨引入lombok依賴,如下所示,注意無須指定版本,因為SpringBoot2.2.5已經有預設關聯的lombok版本了,當然你手工指定也OK。
<!-- 添加lombok相關功能 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
4. 看看Lombok實作了啥功能
看注釋,get/set/toString/equals/hashCode這些常用的都給我們生成了,簡直太友善了!
@Data // 通過@Data注解為該類啟用Lombok功能
* 測試入口
public static void main(String[] args) {
BlogDo blog = new BlogDo();
// 自動生成了set方法
blog.setId(1L);
blog.setTitle("測試部落格");
blog.setContent("測試内容");
// 自動生成了get方法
System.out.println(blog.getId());
System.out.println(blog.getTitle());
System.out.println(blog.getContent());
// 自動生成了toString(),列印所有屬性
System.out.println(blog);
// 自動生成了equals方法
BlogDo otherBlog = new BlogDo();
otherBlog.setId(1L);
otherBlog.setTitle("測試部落格");
otherBlog.setContent("測試内容");
System.out.println(blog.equals(otherBlog));// 輸出true,生成的equals判斷所有屬性相同
// 自動生成hashCode方法
System.out.println(blog.hashCode());// 輸出577081312
System.out.println(otherBlog.hashCode());// 輸出577081312
// 測試往set中添加資料
Set<BlogDo> set = new HashSet<BlogDo>();
System.out.println(set.add(blog));// 輸出true
System.out.println(set.add(otherBlog));// 輸出false
5. Lombok有什麼坑麼
在繼承時,Lombok自動生成的toString、equals、hashCode方法預設會忽略父類的不同,其實這一點挺坑的,看例子。
/*
* 父類-動物
@Data
public class Animal {
private String type;
* 子類-人類,人類也是哺乳動物的一種
public class Human extends Animal{
private String name;
* 測試
Human h1=new Human();
h1.setType("猿人");
h1.setName("老陳");
Human h2=new Human();
h2.setType("新人類");
h2.setName("老陳");
System.out.println(h1.toString());//輸出:Human(name=老陳),可見直接忽略了父類
System.out.println(h1.equals(h2));//輸出:true,判斷相等也不看父類,其實這個不符合我們正常思維的
System.out.println(h1.hashCode()==h2.hashCode());//輸出true,也不看父類情況
其實預設應該是将父類的參數納入計算,這樣才符合我們正常思維,預設思維。
但是也能解決,添加以下兩個注解,就能将父類内容納入計算了
@ToString(callSuper = true)//讓父類參與到計算
@EqualsAndHashCode(callSuper = true)//讓父類參與到計算
1
2
我們納入注解以後看下情況:
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
System.out.println(h1.toString());//輸出:Human(super=Animal(type=猿人), name=老陳)
System.out.println(h1.equals(h2));//輸出:false,父類參與判斷了
System.out.println(h1.hashCode()==h2.hashCode());//輸出false,父類參數參與計算了
6. 總結
Lombok還是要用的,需要稍微注意一下使用中的問題就行。
另外equals和hashCode預設會讓所有的屬性參與計算,實際我們在寫項目中,可能隻用一個id計算。那就需要重寫equals和hashCode方法。
一些童鞋不喜歡寫hashCode,這是不對的哦,因為hashCode不光有助于快速查找,還影響相等的判斷,是以不寫hashCode可能直接導緻判斷失敗!
一些散列集合如HashMap/HashSet,會先看hashCode是否相等,hashCode不等則直接認定不相等了,根本不會給equals機會。
是以記住:凡是重寫equals,必須要重寫hashCode!
最後今天是周日,祝大家周日哈皮!