【新手必看】IDEA 神器 Lombok 全攻略:让你告别又长又臭的实体类代码!
前言 (为什么要用 Lombok?)
写 Java 实体类(Entity)时,你是不是经常被这种事情折磨:明明类里只有 5 个属性,加上 getter/setter、toString、无参/全参构造器后,代码瞬间飙升到上百行?这些代码毫无逻辑可言,全是繁琐的“废话”,不仅看着臃肿,后期加个字段还得重新生成一遍,太反人类了!
今天给大家安利 Java 开发者的装机必备神器——Lombok。它能通过几个简单的注解,在编译阶段自动帮你生成这些废话代码,让你的源代码瞬间清爽!而且它只在编译时起作用,对运行时的性能零影响,放心大胆用!
一、环境准备 (手把手教安装)
1. 安装 IDEA 插件
打开 IDEA,点击 Settings -> Plugins,在 Marketplace 中搜索 Lombok 并安装(较新的 IDEA 版本已经默认内置啦,勾选启用即可)。

2. 引入 Maven 依赖
在你的 pom.xml 中加入以下依赖(如果你用的是 Spring Boot,很多时候 starter 里已经自带了,但检查一下总没错):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
二、核心注解详解 (干货部分)
这些是你写实体类(Entity)时最常用的注解。
1.必会 -> @Data (懒人神器)
这是全家桶注解。只要在类上加上它,就等于同时加上了:
@Getter(所有字段的 get 方法)@Setter(所有非 final 字段的 set 方法)@ToString(自动生成 toString 方法)@EqualsAndHashCode(自动生成 equals 和 hashCode 方法)@RequiredArgsConstructor(生成包含 final 字段的构造器)
@Data
public class User {
private Long id;
private String name;
}
// 此时你就可以直接调用 user.getId(), user.setName() 等方法了。
2. 必会 -> 构造器注解(MyBatis-Plus 必用)
MyBatis 等框架通常需要无参构造器来反射创建对象。如果你手写了一个带参构造器,Java 就不会赠送默认无参构造器了,会导致报错。所以建议习惯性加上:
-
@NoArgsConstructor:生成一个无参构造器。 -
@AllArgsConstructor:生成一个全参构造器(包含所有字段)。
@Data
@NoArgsConstructor // 必须有,防止反射报错
@AllArgsConstructor // 方便测试时 new 对象
public class User {
// ...
}
3.进阶 -> @Accessors(chain = true) (链式编程)
加上这个注解后,setter 方法会返回对象本身(this),而不是 void。这允许你像穿糖葫芦一样写代码。下面是加此注解前后的对比,普通写法:
User user = new User();
user.setName("张三");
user.setAge(18);
加了 @Accessors(chain = true) 后:
User user = new User().setName("张三").setAge(18); // 一行搞定
4.进阶 -> @Builder (构建者模式)
当字段非常多(比如 20 个字段),用全参构造器传参会让人眼花(分不清第 5 个参数是 phone 还是 email)。@Builder 允许你以流式的方式构建对象,用法:
@Data
@Builder
public class User { ... }
// 使用时:
User user = User.builder()
.id(1L)
.name("李四")
.email("test@test.com")
.build();
5. 进阶 -> @Slf4j (日志神器)
不需要再手写 private static final Logger logger = LoggerFactory.getLogger(User.class); 这一长串了。加上注解,类里直接用 log 变量。
@Slf4j
@Service
public class UserService {
public void test() {
log.info("这是一条日志,打印时间:{}", System.currentTimeMillis());
log.error("出错了!");
}
}
三、对比:Lombok 到底省了多少事?
1.又长又臭的没有 Lombok 的代码:
public class User {
private Long id;
private String name;
public User() {}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
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; }
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + '\'' + '}';
}
// 还没写 equals 和 hashCode...
}
2.清爽的使用 Lombok 的代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
}
这两段代码在功能上是完全等价的!
四、在 IDEA 里查看“隐身”的代码
虽然源代码里看不到 get/set 方法,但可以通过 IDEA 的 Structure(结构) 面板看到它们真实存在。
- 打开
User类。 - 按下
Alt + 7(Windows) 或点击左侧边栏的Structure。 - 里面列出了
getId,setName,toString等方法,图标上通常会有一个小小的L标志,说明是 Lombok 生成的。

五、实战演示:日常开发推荐模版
以后写实体类,可以直接复制我这个模版,配合 MyBatis-Plus 使用:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data // 1. 生成 get/set/toString/equals
@NoArgsConstructor // 2. 生成无参构造(框架反射必须)
@AllArgsConstructor // 3. 生成全参构造(测试方便)
@Accessors(chain = true) // 4. (可选) 开启链式调用,让 new 对象更优雅
@TableName("t_user") // 5. MyBatis-Plus 注解,指定数据库表名
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private Integer isDeleted;
}
六、常见坑点 (避坑指南)
-
插件没装:虽然有依赖,但 IDEA 插件没装的话,代码会标红(找不到 get/set 方法)。
-
构造器冲突:手动写了构造器后,默认的无参构造器会消失,记得补上
@NoArgsConstructor。 -
@Data 的坑:在使用 Hibernate/JPA 做双向关联(比如 User 有 List,Order 有 User)时,
@ToString可能会导致死循环内存溢出(StackOverflowError),此时建议手动重写 toString 或排除字段。但在 MyBatis-Plus 中一般没事。
写在最后
工具的意义就在于把人从重复的体力劳动中解放出来,去思考更有价值的业务逻辑。Lombok 绝对是每个 Java 程序员都应该熟练掌握的效率神器。你平时最喜欢用 Lombok 的哪个注解?还是遇到过什么奇葩的坑? 欢迎在评论区留言交流!
如果这篇文章对你有帮助,别忘了点赞、收藏、关注一波!你们的支持是我持续分享干货的最大动力!我们下期见~
更多推荐




所有评论(0)