简化pojo类的书写(getter、setter、tostring、equals、hascode.....)
pojo: plain old/ordinary java object 简单的java对象,不包含业务逻辑、能够控制自己内部n个属性访问的java对象
pojo |
java beans |
不需要有无参构造函数 |
必须有无参构造函数 |
属性的访问权限无限制==>外部可通过属性名访问 |
private==>setter 和 getter |
没有业务逻辑 |
没有业务逻辑 |
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"},则需要所有的属性值相同,才是同一个对象