前言 (为什么要用 Lombok?)

        写 Java 实体类(Entity)时,你是不是经常被这种事情折磨:明明类里只有 5 个属性,加上 getter/settertoString、无参/全参构造器后,代码瞬间飙升到上百行?这些代码毫无逻辑可言,全是繁琐的“废话”,不仅看着臃肿,后期加个字段还得重新生成一遍,太反人类了!

        今天给大家安利 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(结构) 面板看到它们真实存在。

  1. 打开 User 类。
  2. 按下 Alt + 7 (Windows) 或点击左侧边栏的 Structure
  3. 里面列出了 getIdsetNametoString 等方法,图标上通常会有一个小小的 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 的哪个注解?还是遇到过什么奇葩的坑? 欢迎在评论区留言交流!

        如果这篇文章对你有帮助,别忘了点赞、收藏、关注一波!你们的支持是我持续分享干货的最大动力!我们下期见~ 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐