簡化pojo類的書寫(getter、setter、tostring、equals、hascode.....)
pojo: plain old/ordinary java object 簡單的java對象,不包含業務邏輯、能夠控制自己内部n個屬性通路的java對象
pojo | java beans |
不需要有無參構造函數 | 必須有無參構造函數 |
屬性的通路權限無限制==>外部可通過屬性名通路 | private==>setter 和 getter |
沒有業務邏輯 | 沒有業務邏輯 |
Lombok使用(一) dto: data transfer object
do: data object (表的字段一一對應的)
po:persist object
bo: business object
vo: view/value object 值對象
DDD中: command、co、ao
# 1.引入jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
# java -jar lombok-1.18.10.jar
# 在彈出的視窗中選擇eclipse安裝目錄即可并重新開機
# 第2步相當于修改了eclipse.ini
-javaagent:E:\programs\eclipse\eclipse\lombok.jar
# 1.引入jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
# 2.file -> settings -> annotation processors -> 勾選enable annotation processing
# 3.安裝lombok插件
@AllArgsConstructor(access = AccessLevel.PRIVATE) // 全參構造器,如果加上private,則外部不能通路
@NoArgsConstructor // 無參構造器
@RequiredArgsConstructor // 為必須要傳的屬性生成構造器
public class UserInfo {
private Long id;
private String name;
private String phone;
private Date birthDay;
private String address;
/**
* @RequiredArgsConstructor 包含兩種屬性
*/
@NonNull // 1.當屬性被加了@NonNull,則該屬性會被包含在構造函數中
private String nonNullProp;
// 2. final:定義的時候初始化/構造函數中初始化,當加了final,則該屬性會被包含在構造函數中
private final String finalProp;
}
@Getter @Setter
public class UserInfo2 {
@Getter(value = AccessLevel.PUBLIC) // 指定為預設
private Long id;
private String name;
private String phone;
private Date birthDay;
@Setter(value = AccessLevel.NONE) // none表示不生成
@Getter(value = AccessLevel.NONE)
private String address;
// 自己寫的優先級更高
public String getName() {
return "我自己寫的getName方法" +name;
}
}
@ToString(
// of = {"id"}, // 隻為某個字段生成tostring方法
exclude = {"name"}, // 排除某個字段不生成tostring方法
callSuper = true // 指定調用父類的toString+本類的toString
)
public class UserInfo3 {
private Long id;
private String name;
private String phone;
private Date birthDay;
private String address;
}
// equals和hashCode方法要保持邏輯上的一緻
@EqualsAndHashCode(of = {"id"}) // 隻使用id來生成equals和hashCode方法
public class UserInfo4 {
private Long id;
private String name;
private String phone;
private Date birthDay;
private String address;
}
# 測試:由于隻使用id生成equals和hashCode方法,是以隻需要id相同,就是同一個對象
# 如果不配置of = {"id"},則需要所有的屬性值相同,才是同一個對象