Spring学习笔记:尝试Lombok简化实体类代码
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习笔记:尝试Lombok简化实体类代码相关的知识,希望对你有一定的参考价值。
一、Lombok概述
Lombok能以简单的注解形式来简化Java代码,提高开发人员的开发效率。例如开发中经常需要写的JavaBean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。
Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。
Lombok官网:https://projectlombok.org/
二、安装Lombok插件
- 在设置对话框的插件里搜索Lombok
- 单击【Install】按钮
- 单击【Restart IDE】按钮
三、Lombok注解
(一)@Data
@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
(二)@Getter/@Setter
如果觉得@Data太过残暴(因为@Data集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性)不够精细,可以使用@Getter/@Setter注解,此注解在属性上,可以为相应的属性自动生成Getter/Setter方法。
(三)@NonNull
该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。
(四)@Cleanup
该注解能帮助我们自动调用close()方法,很大地简化了代码。
(五)@EqualsAndHashCode
默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。
(六)@ToString
类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。通过将includeFieldNames参数设为true,就能明确的输出toString()属性。这一点是不是有点绕口,通过代码来看会更清晰些。
(七)@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。
四、Lombok案例演示
(一)创建Spring Boot项目 - LombokDemo
(二)创建用户实体类 - User
package net.hw.bean;
import com.sun.istack.internal.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;
/**
* 功能:用户实体类
* 作者:华卫
* 日期:2021年05月08日
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
@NotNull private int id;
private String username;
private String password;
private String telephone;
private Date registerTime;
}
(三)创建用户控制器 - UserController
package net.hw.controller;
import net.hw.bean.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
* 功能:用户控制器
* 作者:华卫
* 日期:2021年05月10日
*/
@RestController
public class UserController {
@GetMapping("/user1")
public String user1() {
User user = new User();
user.setId(1);
user.setUsername("萌萌哒");
user.setPassword("123456");
user.setTelephone("15845456789");
user.setRegisterTime(new Date());
return user.toString();
}
@GetMapping("/user2")
public String user2() {
User user = new User(2, "哇哈哈", "345678", "15890903334", new Date());
return "编号:" + user.getId() + "<br/>"
+ "用户名:" + user.getUsername() + "<br/>"
+ "密码:" + user.getPassword() + "<br/>"
+ "电话:" + user.getTelephone() + "<br/>"
+ "注册时间:" + user.getRegisterTime();
}
}
(四)启动应用,测试效果
1、访问http://localhost:8080/user1
2、访问http://localhost:8080/user2
以上是关于Spring学习笔记:尝试Lombok简化实体类代码的主要内容,如果未能解决你的问题,请参考以下文章
idea安装Lombok plugin插件,实体不用get set简化开发
Idea插件之Lombok简化实体类setter/getter操作
拥有实体实例 - Spring 和 Lombok 不再引用具有 cascade="all-delete-orphan" 的集合
Spring Boot 2从入门到入坟 | Best practices篇:使用Lombok插件来简化JavaBean的开发