Lombok 使用教程

news2024/11/21 2:39:17

lombok

官网 Project Lombok
课程目标:
  • 什么是lombok
  • lombok的原理
  • lombok的常用注解
  • lombok的安装

引言

  • 还记得刚刚接触java,学习面向对象时因为手写get,set,hashcode,equals等方法的痛苦吗?
  • 还记得后来上手了Eclipse或Idea这样工具可以快速生成get,set等相关方法的兴奋吗? 好强大...
  • 后来工作时间长了,这种兴奋渐渐就变成了的苦恼?
很重要一个原因就是因为随着项目业务模块功能不断扩展,项目中涉及库表越来越多,导致项目中实体类(Entity)对象越来越多,每次写Entity对象最头疼就是生成Get,Set等相关方法,极大影响开发效率,如何更好的解决呢? lombok出现仿佛让我们回到曾经的那种喜悦!!!

lombok是什么

Lombok项目是一个Java库,它会自动插入编辑器到构建工具中,Lombok提供了一组有用的注释(注解),用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类 ---百度百科
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. --摘自官网
通俗解释: lombok快速开发工具,提供了一组java相关注解,通过注解用来更快速生成java对象中我们想要的相关方法(get,set,toString ....)等一系列方法

lombok第一个环境

1.引入依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

2.使用提供注解

@Data
public class User {
    private String id;
    private String name;
    private Integer age;
    private Date bir;
}
@Data注解: 自动给对象提供 GET SET ToString hashCode equals 等方法

lombok的原理

lombok一组注解

1.@Data注解

    属性
修饰符和类型
属性名
描述
string
staticConstructor
如果你指定一个静态构造函数名,那么生成的构造函数将是私有的,而创建一个静态工厂方法,其他类可以用来创建实例。
  • @Data 用在类上
  • 用来生成对象中GET SET ToString HashCode equals等相关方法
  • 相当于:@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
  • 为所有字段生成getter,一个有用的toString方法,以及hashCode和equals实现。还将为所有非final字段以及构造函数生成setter
  • staticConstructor: 默认:没有静态构造函数,而是普通的构造函数是公共的。如果你指定一个静态构造函数名,那么生成的构造函数将是私有的,而创建一个静态工厂方法,其他类可以用来创建实例。建议这个名字:“of”,就像这样:public @Data(staticConstructor =“of”)类Point {final int x,y; }.
  • 具体用法
    @Data
    public class User {
       private String id;
       private String name;
       private Integer age;
       private Date bir;
    }

2.@Getter和@Setter

  • 用在类上
  • 用来只生成对应GET SET方法
  • 具体用法
    @Getter
    @Setter
    public class User {
       private String id;
       private String name;
       private Integer age;
       private Date bir;
    }

3.@ToString

    属性
修饰符和类型
属性名
描述
boolean
callSuper
toString 在输出中包含超类实现的结果
string
exclude
这里列出的任何字段将不会被打印在生成的 toString 实现中
boolean
includeFieldNames
在打印时包括每个字段的名称
string
of
如果存在,明确列出要打印的字段
  • 用在类上
  • 用来生成toString方法
  • callSuper:默认 false
  • exclude: 默认为空
  • includeFieldNames:默认为 true  会打印字段名称
  • of:默认为全部字段,即打印全部字段

4.@AllArgsConstructor 和 @NoArgsConstructor

  • 用在类上
  • 用来生成全部参数构造方法 和 无参数构造方法
  • 具体用法
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
       private String id;
       private String name;
       private Integer age;
       private Date bir;
    }

5.@Accessors

    属性
修饰符和类型
属性名
描述
boolean
fluent
如果为true生成的get/set方法则没有set/get前缀,默认为false
boolean
chain
如果为true生成的set方法返回this,为false生成的set方法是void类型。默认为false,除非当fluent为true时,chain默认则为true
string
prefix
可以指定前缀,生成get/set方法时会去掉指定的前缀
  • 用在类上
  • 用来给类中set方法开启链式调用 chain属性: 用来指定是否开启SET方法链式调用 true 开启 false 不开启
  • 具体用法
    @Data
    @Accessors(chain = true)
    public class User {
       private String id;
       private String name;
       private Integer age;
       private Date bir;
    }
    user.setId("21").setName("xiaochen").setAge(23).setBir(new Date());

6.@Slf4j

  • 用在类上
  • 用来快速给类中定义一个日志变量
  • 原理
    • 在对应类上加入这个注解相当于在这个类中声明了一个日志对象
      private Logger log = LoggerFactory.getLogger(this.getClass());
具体用法
@Controller
@RequestMapping("user")
@Slf4j
public class UserController {
   @RequestMapping("findAll")
   public String findAll(){
       log.info("进入findAll方法");
       log.info("姓名:[{}],年龄:[{}]",name,age);
      return "index";
   }
}
7.@Accessors

idea中如何安装lombok

注意:默认在idea中不支持lombok语法,写上之后没有任何效果,需要在idea中额外安装插件才可以继续使用lombok
Preferences | Plugins --> 搜索lombok 下载安装 安装完成重启idea即可
安装完成之后出现如下问题的解决方案:
  • 解决方案:

持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【如何训练一个中译英翻译器】LSTM机器翻译模型部署之ncnn(python)(五)

系列文章 【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型部署&#xff08;三&#xff09; 【如何训…

数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)

目录 桶排序 图示 伪代码 时间复杂度 基数排序 多关键字排序 代码&#xff08;C语言&#xff09; 次位优先 主位优先 桶排序 假设有N个学生&#xff0c;他们的成绩是0到100之间的整数&#xff08;于是有M101个不同的成绩值&#xff09;。如何在线性时间内将学生按成绩…

什么是在线帮助中心?

随着企业越来越注重客户体验和服务质量&#xff0c;建立一个完善的在线帮助中心已经成为企业不可或缺的一部分。在线帮助中心可以帮助客户解决各种问题&#xff0c;从而提升客户满意度和忠诚度。而Baklib作为一款优雅的云知识库构建平台&#xff0c;提供了一种简单高效的方式来…

网页聊天室项目性能测试报告

文章目录 一 概述二 测试环境三 测试内容及方法四 GUI测试步骤五 简单数据写入器 HTML报告DashBoard六 结果分析七 性能优化方案 一 概述 1.1 目的 本测试报告为网页聊天室的性能测试报告&#xff0c;目的在于总结性能测试阶段的学习以及分析测试结果&#xff0c;描述网站是否…

创建线程的两种方式

一、线程相关概念 程序&#xff1a;完成特定任务&#xff0c;用某种语言编写的一组指令的集合。进程&#xff1a;运行起来的程序就是进程。进程运行时&#xff0c;操作系统需要为该进程分配内存空间。进程是一个动态过程&#xff0c;有产生、存在和消亡的过程。线程&#xff1…

osg earth中加载标签并设置文字 以及使用注意事项

osgearth中加载标签并设置文字 //头文件 #include <osgEarthAnnotation/PlaceNode> #include <osgEarthSymbology/Style> #include <osgEarth/MapNode> osgEarth::GeoPoint position(m_mapnode->getMapSRS(), lon, lat, 0, osgEarth::AltitudeMode::ALTM…

数据驱动商业合作:企业联系方式查询API在市场中的角色与作用

摘要 在当今数字化商业环境中&#xff0c;企业间的商务合作和合作伙伴关系构建变得更加重要。为了有效推进商业拓展和建立持久合作&#xff0c;企业需要快速、准确地获取潜在合作伙伴的联系方式。本文将深入探讨企业联系方式查询 API 在市场中的角色与作用&#xff0c;以及它如…

JetBrains全家桶:如何自定义实现类TODO注释?

文章目录 效果图具体方法参考文献 效果图 TODO注释大家应该都用过&#xff0c;在注释开头打上TODO的话&#xff0c;软件下方的TODO选项卡里就可以自动筛选出你打了TODO的注释&#xff0c;你可以点击里面对应的注释来实现快速跳转。 jetbrains全家桶&#xff08;如Pycharm、Int…

LKT(LCS)系列IIC接口加密芯片

调试常见问题&#xff08;一&#xff09; 1.加密芯片的数据交互协议是什么格式&#xff1f; 发送时&#xff1a;地址两字节数据长度&#xff08;后续数据的长度&#xff09;后续数据内容。Eg.50 0005 0084000008。接收时&#xff1a;地址两字节数据长度&#xff08;后续数据的…

万字长文详解Webpack5高级优化

本文从 4 个角度对 webpack 和代码进行了优化&#xff1a; 1.提升开发体验 使用 Source Map 让开发或上线时代码报错能有更加准确的错误提示。 2.提升打包构建速度 使用 HotModuleReplacement 让开发时只重新编译打包更新变化了的代码&#xff0c;不变的代码使用缓存&#xff…

Github Flow工作流简单介绍(以部署为中心的开发模式)

前言 这篇文章主要介绍Github Flow的理念&#xff0c;以下内容来源于《Github入门与实践》。 Github Flow是以部署为中心的开发模式&#xff0c;通过简单的规则&#xff0c;持续高速且安全地进行部署。而Gitflow则是以发布为中心的分支管理模型&#xff0c;它提供了一种更灵活…

【Docker】Docker容器编排

目录 一、Docker Compose1.2Docker Compose 环境安装1.3 YAML 文件格式及编写注意事项2.3 Docker Compose配置常用字段2.4 Docker Compose 常用命令 二、Docker Compose实验2.1编写Nginx的Dockerfile脚本2.2编写MySQL&#xff0c;Dockerfile脚本2.3编写PHP&#xff0c;Dockerfi…

QT样式表qss中的长度单位px/pt/%/em/ex/mm/in等

以下是从CSS里抄来的。QSS只能支持其中一部分。 1、px&#xff1a;像素(Pixel),相对于设备的长度单位&#xff0c;像素是相对于显示器屏幕分辨率而言的。譬如&#xff0c;WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。 像素&a…

在培训班里学IT技术是否有用?和大家分享相关IT培训班里五大常见宣传手法、相关优势与实际效果

目录 Introduction 引言IT培训班常见宣传手法培训班的优势如何评判IT培训班的效果与质量除IT培训班之外的学习渠道总结其它资料下载 Introduction 引言 随着信息技术的飞速发展&#xff0c;学习IT技术成为许多人追求职业发展和个人兴趣的重要途径。从软件开发、数据科学到人工…

OpenAI Code Interpreter 的开源实现:GPT Code UI

本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中&#xff0c;获得较多支持者&#xff0c;但暂时还比较早期的项目&#xff1a;GPT Code UI。 写在前面 这篇文章本该更早的时候发布&#xff0c;但是 LLaMA2 发布后实在心痒难忍&#xff0c;于是就拖了一阵。结合 L…

插件使用权限管理软件(一)框架选择和Furion框架搭建

项目背景 软件主要服务于传统设计院&#xff0c;用于管理和监控设计院内部插件的使用权限和使用情况。可根据使用的频率来对插件使用情况的分析。后续可以加上错误报告等提测报告&#xff0c;使整个监控插件使用情况更加流程化。由于博主主要做CAD和Revit的二次开发工作&#x…

【力扣每日一题】2023.7.25 将数组和减半的最少操作次数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个数组&#xff0c;我们每次可以将任意一个元素减半&#xff0c;问我们操作几次之后才可以将整个数组的和减半&…

实例025 带分隔栏的窗体

实例说明 在软件开发中&#xff0c;经常需要将界面分成几个部分&#xff0c;而且这几个部分又可以自由调整大小。运行本例&#xff0c;实例效果如图1.25所示。 技术要点 在.NET 2.0框架中可以非常轻松的实现这一功能&#xff0c;只要在窗体中加入SplitContainer控件即可。Sp…

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…

Cesium态势标绘专题-自由多边形(标绘)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…