SpringBoot使用Lombok简化开发

简介: 本文目录1. 场景2. 安装Lombok3. 引入Lombok4. 看看Lombok实现了啥功能5. Lombok有什么坑么6. 总结

1. 场景

都说咧,Spring Boot就是为简化Spring开发而生,Boot么,快速启动,哪里不够快,就干倒它!这不是口号,Spring Boot就是这么干哩。


那现在仔细瞅瞅,我们的项目还有什么重复代码?毫无技术含量,都是简单的逻辑重复。看看我们的数据对象DO


/**

* 博客类

*/

public class BlogDo {

/**

 * 序号

 */

private Long id;

/**

 * 标题

 */

private String title;

/**

 * 内容

 */

private String content;


public Long getId() {

 return id;

}

public void setId(Long id) {

 this.id = id;

}

public String getTitle() {

 return title;

}

public void setTitle(String title) {

 this.title = title;

}

public String getContent() {

 return content;

}

public void setContent(String content) {

 this.content = content;

}

}


有没有发现get/set方法,完全是固定模式的,只要属性名确定了,方法怎么写也就确定了。


而且我们平时写的时候,一般也不用自己手写,直接利用开发工具生成就行。既然是模板代码,何必浪费手工生成的时间。


使用Lombok,即可帮我们自动生成get/set模板代码,而且它还能做到更多!


2. 安装Lombok

首先下载lombok jar包,点此打开下载页


点击图中jar下载即可

image.png

下载之后双击打开,点击Specify Location然后选择eclipse安装目录下的eclipse.exe,然后点击Install即可。

注意安装完了需要重启下eclipse。

image.png

3. 引入Lombok

安装完了还需要引入Lombok,哈哈,针对开发工具安装一次就够了,然后每个项目需要单独引入lombok依赖,如下所示,注意无须指定版本,因为SpringBoot2.2.5已经有默认关联的lombok版本了,当然你手工指定也OK。


 <!-- 添加lombok相关功能 -->

 <dependency>

  <groupId>org.projectlombok</groupId>

  <artifactId>lombok</artifactId>

  <scope>provided</scope>

 </dependency>


4. 看看Lombok实现了啥功能

看注释,get/set/toString/equals/hashCode这些常用的都给我们生成了,简直太方便了!


/**

* 博客类

*/

@Data // 通过@Data注解为该类启用Lombok功能

public class BlogDo {

/**

 * 序号

 */

private Long id;

/**

 * 标题

 */

private String title;

/**

 * 内容

 */

private String content;


/**

 * 测试入口

 */

public static void main(String[] args) {

 BlogDo blog = new BlogDo();

 // 自动生成了set方法

 blog.setId(1L);

 blog.setTitle("测试博客");

 blog.setContent("测试内容");

 // 自动生成了get方法

 System.out.println(blog.getId());

 System.out.println(blog.getTitle());

 System.out.println(blog.getContent());

 // 自动生成了toString(),打印所有属性

 System.out.println(blog);

 // 自动生成了equals方法

 BlogDo otherBlog = new BlogDo();

 otherBlog.setId(1L);

 otherBlog.setTitle("测试博客");

 otherBlog.setContent("测试内容");

 System.out.println(blog.equals(otherBlog));// 输出true,生成的equals判断所有属性相同


 // 自动生成hashCode方法

 System.out.println(blog.hashCode());// 输出577081312

 System.out.println(otherBlog.hashCode());// 输出577081312


 // 测试往set中添加数据

 Set<BlogDo> set = new HashSet<BlogDo>();

 System.out.println(set.add(blog));// 输出true

 System.out.println(set.add(otherBlog));// 输出false

}

}

5. Lombok有什么坑么

在继承时,Lombok自动生成的toString、equals、hashCode方法默认会忽略父类的不同,其实这一点挺坑的,看例子。


/*

* 父类-动物

*/

@Data

public class Animal {

private String type;

}


/**

* 子类-人类,人类也是哺乳动物的一种

*/

@Data

public class Human extends Animal{

private String name;

/**

 * 测试

 */

public static void main(String[] args) {

 Human h1=new Human();

 h1.setType("猿人");

 h1.setName("老陈");

 Human h2=new Human();

 h2.setType("新人类");

 h2.setName("老陈");

 

 System.out.println(h1.toString());//输出:Human(name=老陈),可见直接忽略了父类

 System.out.println(h1.equals(h2));//输出:true,判断相等也不看父类,其实这个不符合我们正常思维的

 System.out.println(h1.hashCode()==h2.hashCode());//输出true,也不看父类情况

}

}


其实默认应该是将父类的参数纳入计算,这样才符合我们正常思维,默认思维。


但是也能解决,添加以下两个注解,就能将父类内容纳入计算了


@ToString(callSuper = true)//让父类参与到计算

@EqualsAndHashCode(callSuper = true)//让父类参与到计算

1

2

我们纳入注解以后看下情况:


/**

* 子类-人类,人类也是哺乳动物的一种

*/

@Data

@ToString(callSuper = true)

@EqualsAndHashCode(callSuper = true)

public class Human extends Animal{

private String name;

/**

 * 测试

 */

public static void main(String[] args) {

 Human h1=new Human();

 h1.setType("猿人");

 h1.setName("老陈");

 Human h2=new Human();

 h2.setType("新人类");

 h2.setName("老陈");

 

 System.out.println(h1.toString());//输出:Human(super=Animal(type=猿人), name=老陈)

 System.out.println(h1.equals(h2));//输出:false,父类参与判断了

 System.out.println(h1.hashCode()==h2.hashCode());//输出false,父类参数参与计算了

}

}

6. 总结

Lombok还是要用的,需要稍微注意一下使用中的问题就行。


另外equals和hashCode默认会让所有的属性参与计算,实际我们在写项目中,可能只用一个id计算。那就需要重写equals和hashCode方法。


一些童鞋不喜欢写hashCode,这是不对的哦,因为hashCode不光有助于快速查找,还影响相等的判断,所以不写hashCode可能直接导致判断失败!


一些散列集合如HashMap/HashSet,会先看hashCode是否相等,hashCode不等则直接认定不相等了,根本不会给equals机会。


所以记住:凡是重写equals,必须要重写hashCode!


最后今天是周日,祝大家周日哈皮!

相关文章
|
8月前
|
Java
SpringBoot项目集成Lombok
SpringBoot项目集成Lombok
75 1
|
3月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
141 0
|
8月前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
101 5
|
网络协议 前端开发 Java
SpringBoot+Netty开发IM即时通讯系列(一)
简单来讲,Netty是一个提供了易于使用的API的客户端/服务端框架。Netty并发非常高,一个非阻塞的IO,Netty传输速度也非常快,因为他是0拷贝,什么是零拷贝?NIO中的特性之一就是零拷贝,在Java中,内存分为堆和栈以及字符串常量值等等,如果有一些数据从IO中读取并且放到堆里面,中间会经过一些缓冲区。
1143 0
SpringBoot+Netty开发IM即时通讯系列(一)
|
8月前
|
Java 关系型数据库 MySQL
结合springboot+mybatis-plus+lombok,自定义Page封装类
结合springboot+mybatis-plus+lombok,自定义Page封装类
318 0
|
8月前
|
Java
SpringBoot:第二篇 集成日志lombok
SpringBoot:第二篇 集成日志lombok
87 0
|
安全 Java 测试技术
微服务技术系列教程(06) - SpringBoot - lombok简洁代码
微服务技术系列教程(06) - SpringBoot - lombok简洁代码
90 0
SpringBoot2.0(Lombok,SpringBoot统一返回封装)
SpringBoot2.0(Lombok,SpringBoot统一返回封装)
|
人工智能 Java
SpringBoot实战(一):使用Lombok简化你的代码
SpringBoot实战(一):使用Lombok简化你的代码
101 0

热门文章

最新文章