天天看點

Lombok使用(一)

  • 作用
簡化pojo類的書寫(getter、setter、tostring、equals、hascode.....)

pojo: plain old/ordinary java object 簡單的java對象,不包含業務邏輯、能夠控制自己内部n個屬性通路的java對象      
  • pojo與javabeans
pojo java beans
不需要有無參構造函數 必須有無參構造函數
屬性的通路權限無限制==>外部可通過屬性名通路 private==>setter 和 getter
沒有業務邏輯 沒有業務邏輯
Lombok使用(一)
  • 各類pojo
dto: data transfer object

do: data object (表的字段一一對應的)

po:persist object

bo: business object

vo: view/value object 值對象

DDD中: command、co、ao      
  • eclipse中使用配置
# 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      
  • idea中使用配置
# 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
@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
@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;
}      
  • EqualsAndHashCode
// 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"},則需要所有的屬性值相同,才是同一個對象