一.介绍
Project Lombok 是一个 Java 库,它会自动插入编辑器和构建工具,为您的 Java 增添趣味。永远不要再写另一个 getter 或 equals 方法,使用一个注释,您的类有一个功能齐全的构建器,自动化您的日志记录变量等等。
二.添加Lombok依赖
1.pom文件中添加
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
2.创建项目中勾选Lombok选项,pom文件中自动生成
三.优缺点
优点: 通过注解的形式自动生成构造器,简化代码,例如在做属性修改的时候不用做
过多的处理
缺点:不支持多种参数构造器的重载
四.常用注解
@Data
使用该注解可以自动生成Getter、Setter、equals、hashCode和toString方法,相当于同时使用了
这些方法
@Getter
自动生成Java Bean类的Getters方法(访问实体类的属性)
@Setter
自动生成Java Bean类的Setter方法(访问实体类的属性)
@ToString
可以自动生成ToString方法(将一个对象的属性转换成一个字符串,方便输出调试信息。)
@EqualsAndHashCode
@EqualsAndHashCode注解可以自动生成equals和hashCode方法(可以用来比较两个对象是否相等。)
综上@Data包含如上述注解,如果其他注解默认使用的话,就可以直接使用@Data
对于@EqualsAndHashCode注解有两种写法
@EqualsAndHashCode(callSuper = false)和@EqualsAndHashCode(callSuper = ture)
前者默认就是不管父类继承的属性的,后者是用自己的属性和从父类继承的属性 来生成hashcode
使用@Data注解
 
 package com.haxlab.server.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Table("t_student")
public class Student {
    @Id(keyType = KeyType.Auto)
    private long id;
    private String name;
    private String gender;
    private int score;
    private String grade;
}
 
 
通过这个注解,不用在写Getter和Setter方法,就能访问实体类里的属性
也不用在写equals、hashCode和toString方法
不使用Data注解
 
 package com.haxlab.server.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Table("t_student")
public class Student {
    @Id(keyType = KeyType.Auto)
    private long id;
    private String name;
    private String gender;
    private int score;
    private int grade;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) {
        this.grade = grade;
    }
    public boolean equals(Object object) {
        if (this == object) return true;
        if (!(object instanceof Student)) return false;
        if (!super.equals(object)) return false;
        Student student = (Student) object;
        return getId() == student.getId() && getScore() == student.getScore() && getGrade() == student.getGrade() && java.util.Objects.equals(getName(), student.getName()) && java.util.Objects.equals(getGender(), student.getGender());
    }
    public int hashCode() {
        return java.util.Objects.hash(super.hashCode(), getId(), getName(), getGender(), getScore(), getGrade());
    }
    @java.lang.Override
    public java.lang.String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", score=" + score +
                ", grade=" + grade +
                '}';
    }
} 
 
如果要修改实体类某个属性的时候,不使用@Data注解,修改过程会相对很麻烦
@AllArgsConstructor和@NoArgsConstructor
@AllArgsConstructor生成全参构造法
@NoArgsConstructor生成无参数构造法
 
 @Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private int age;
} 
 
等价于
@Data public class User { private int id; private String name; private int age; public User() { } public User(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } }
  
  




















