文章目录
- 一、简介
- 二、如何使用
- 三、常用注解
-
- [3.1、@Getter / @Setter](#3.1、@Getter / @Setter)
- 3.2、@ToString
- [3.3、@NoArgsConstructor / @AllArgsConstructor](#3.3、@NoArgsConstructor / @AllArgsConstructor)
- 3.4、@EqualsAndHashCode
- 3.5、@Data
- 3.6、@Value
- 3.7、@Accessors
-
- [3.7.1、@Accessors(chain = true)](#3.7.1、@Accessors(chain = true))
- [3.7.2、@Accessors(fluent = true)](#3.7.2、@Accessors(fluent = true))
- [3.7.3、@Accessors(prefix = "xxx")](#3.7.3、@Accessors(prefix = "xxx"))
- 3.8、@Slf4j
一、简介
Lombok可以通过注解来帮助我们简化实体对象(POJO)的代码书写
二、如何使用
2.1、在IDEA中安装Lombok插件
File -> Settings -> Plugins


安装完成后重启IDEA
2.2、添加maven依赖
在 pom.xml 文件里增加
xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
三、常用注解
@Getter / @Setter:自动生成类的 get() 和 set() 方法
@ToString:自动生成 toString() 方法
@NoArgsConstructor / @AllArgsConstructor:自动生成无参构造函数,全参构造函数
@EqualsAndHashCode:自动生成 equals() 和 hashCode() 方法
@Data: 相当于 @Getter、@Setter、@EqualsAndHashCode、@ToString 组合的效果
@Value:相当于 @AllArgsConstructor、@Getter、@EqualsAndHashCode、@ToString 组合的效果,并且类和变量都变成 final
@Accessors:可以配置生成 get() 和 set() 方法的样式和命名规则
@Slf4j:自动生成类的 log 静态常量
3.1、@Getter / @Setter
自动生成类的 get() 和 set() 方法

3.2、@ToString
自动生成 toString() 方法

3.3、@NoArgsConstructor / @AllArgsConstructor
自动生成无参构造函数,全参构造函数

这里需要注意,如果不定义构造函数,编译器会默认生成一个空构造函数,但是当你定义了构造函数,编译器就不会生成空构造函数,所以一般这两个注解一起使用,除非只要全参构造函数
3.4、@EqualsAndHashCode
自动生成 equals() 和 hashCode() 方法

3.5、@Data
相当于 @Getter、@Setter、@EqualsAndHashCode、@ToString 组合的效果
3.6、@Value
相当于 @AllArgsConstructor、@Getter、@EqualsAndHashCode、@ToString 组合的效果,并且类和变量都变成 final
3.7、@Accessors
这个注解需要结合 @Getter、@Setter 使用,当然 @Data 也可以
这个注解有三个参数
java
public @interface Accessors {
boolean fluent() default false;
boolean chain() default false;
String[] prefix() default {};
}
3.7.1、@Accessors(chain = true)
我们先看 fluent 参数,将其设置为 true,相当于 get() 方法不受影响,set() 方法会返回对象本身(开启链式编程)

这样我们创建对象后,可以这样赋值
java
public static void main(String[] args) {
User user = new User();
user.setUserId("1").setUserName("张三");
}
3.7.2、@Accessors(fluent = true)
再来看 fluent 参数,将其设置为 true,相当于,get() 和 set() 方法的 get 和set 字样去除了,并且 set 方法会返回对象本身(开启链式编程)

这样我们创建对象后,可以这样赋值
java
public static void main(String[] args) {
User user = new User();
user.userId("1").userName("张三");
}
3.7.3、@Accessors(prefix = "xxx")
使用prefix属性,get() 和set() 方法会忽视属性名的指定前缀,这里我们用 @Accessors(prefix = "user") 举例,相当于 get() 和 set() 方法去除了 user 字样

3.8、@Slf4j
自动生成该类的 log 静态常量

当然我们一般用在业务处理类上,方便打印日志