展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

Lombok使用(一)

  • 作用
简化pojo类的书写(getter、setter、tostring、equals、hascode.....)

pojo: plain old/ordinary java object 简单的java对象,不包含业务逻辑、能够控制自己内部n个属性访问的java对象
  • pojo与javabeans
pojo java beans
不需要有无参构造函数 必须有无参构造函数
属性的访问权限无限制==>外部可通过属性名访问 private==>setter 和 getter
没有业务逻辑 没有业务逻辑

  • 各类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"},则需要所有的属性值相同,才是同一个对象

posted @ 2022-10-02 10:21  DogLeftover  阅读(42)  评论(0编辑  收藏  举报