mp公共字段自动注入

目录

一 什么是公共字段自动注入

 二 使用mp实现公共字段自动注入

        1.实现步骤

①导入mp相关依赖

② 在实体类上给相关字段加上 @TableField()注解

③自定义元数据对象处理器   

        2.实现原理


一 什么是公共字段自动注入

        我们平时在执行更新或者是插入数据功能的时候,都需要给一些公共的字段赋值,比如创建时间,更新时间,创建人,更新人等。这些字段在执行插入或者更新功能的时候,都需要注入一遍这些字段,导致重复代码过多。所以为了解决这一问题,我们可以每次在执行更新或者插入功能的时候,都自动调用一个方法,把这些公共的字段自动注入,这样就省下很多时间。比如下面这些字段:

 二 使用mp实现公共字段自动注入

        因为本项目是基于springBoot整合mybatisPlus的,所以这次介绍的也是mybatisPlus实现公共字段注入。

        1.实现步骤

①导入mp相关依赖

             

<!--        mp--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>3.4.1</version></dependency>

这里有时候加入mp的依赖后,项目会报错,因为mybatis和mybatisPlus依赖会有冲突,我就是一开始报错,后面使用上面这个版本的之后才没有报错。

                

② 在实体类上给相关字段加上 @TableField()注解

       

public class Employee implements Serializable {private static final long serialVersionUID = 1L;private Long id;private String username;private String name;private String password;private String phone;private String sex;private String idNumber;private Integer status;@TableField(fill = FieldFill.INSERT) //执行插入操作时自动填充
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") //该注解的作用是:让返回给前端的日期格式按照我指定的格式,否则返回的是一个数组private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)//执行插入和更新操作时自动填充//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;@TableField(fill = FieldFill.INSERT)//执行插入操作自动填充private Long createUser;@TableField(fill = FieldFill.INSERT_UPDATE)//执行插入和更新时自动填充private Long updateUser;}
@TableField(fill = FieldFill.INSERT):执行插入操作时自动注入该字段
@TableField(fill = FieldFill.INSERT_UPDATE): 执行插入更新操作时注入该字段

还有其他的属性,根据业务需求可以自己去查。

     ③自定义元数据对象处理器   

     需要再定义一个类,需要实现 MetaObjectHandler,然后实现里面的 insertFill() 和 updateFill() 方法,分别代表在执行插入操作和更新操作时执行对应的方法,而方法内部去实现你需要注入的字段的值,代码如下:

@Component
@Slf4j
public class MyMetaObjectHandle implements MetaObjectHandler {
//    插入操作的时候执行该方法@Overridepublic void insertFill(MetaObject metaObject) {log.info("insert公共字段自动填充...{}",metaObject.getOriginalObject());metaObject.setValue("createTime", LocalDateTime.now());// 给createTime属性自动填充值metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("createUser", BaseContext.getCurrentId());//获取当前管理员idmetaObject.setValue("updateUser",BaseContext.getCurrentId());}@Overridepublic void updateFill(MetaObject metaObject) {log.info("update公共字段自动填充... {}",metaObject.getOriginalObject());metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("updateUser",BaseContext.getCurrentId());}
}
metaObject.setValue("createTime", LocalDateTime.now()) : createTime你需要注入的属性名;LocalDateTime.now()注入的属性值

这里一定要加上@Component注解把bean交给spring管理。

注意:如果你的项目并不是一开始就基于MybatisPlus创建,而是后面加上去的,在执行上面三个步骤之后,你的my公共字段注入是不生效的,因为你还忘记了mapper成需要实现BaseMapper接口,这是实现mp必须要的。 

 2.实现原理

        这里简单来说,就是使用了aop+反射+注解+枚举。如果你不是使用my来实现的,就需要自己去写这个过程,mp是帮我们封装好了。大致就是,你使用aop的前置处理,在执行插入和更新操作之前做切面处理,至于怎么识别,可以在插入和更新方法上面加上注解标记,然后用反射得到注解类型进行判断,最后用反射实现对象对应属性的注入操作.

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

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

相关文章

AI技术的未来展望

随着科技的不断革新&#xff0c;0417photo.cn人工智能&#xff08;AI&#xff09;技术正逐步从科幻走向现实&#xff0c;成为推动社会进步和经济发展的重要力量。在这篇文章中&#xff0c;我们将探讨AI技术的当前发展态势、面临的挑战以及未来可能带来的变革。 一、AI技术的当…

智绘“水蓝图”,宏电亮相第4届中国(山东)水利科技与生态建设博览会

5月23-25日&#xff0c;第4届中国&#xff08;山东&#xff09;水利科技与生态建设博览会在济南黄河国际会展中心成功召开。展会以“人水和谐&#xff0c;生态山东”为主题&#xff0c;围绕智慧水利建设、水环境治理、水生态保护等领域&#xff0c;展示当下水利行业的新技术、新…

红酒:如何正确地储存红酒

云仓酒庄雷盛红酒&#xff0c;以其优良的品质和丰富的口感&#xff0c;深受广大消费者的喜爱。然而&#xff0c;要想让这些美酒能够长时间保持良好的状态&#xff0c;正确的储存方式是必不可少的。下面&#xff0c;云仓酒庄雷盛红酒将为您详细介绍如何正确地储存红酒。 一、合适…

C语言笔记23 •文件操作•

1.为什么要使用文件&#xff1f; 文件&#xff0c;顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失 了&#xff0c;等再次运⾏程序&#x…

OnlyOffice DocumentServer 8.0.1编译破解版本(¥100)

OnlyOffice DocumentServer 8.0.1编译破解版本&#xff08;&#xffe5;100&#xff09; 破解20人数限制 更换中文字体 修改源码&#xff0c;根据业务自定义服务 根据源码在本机启动项目&#xff0c;便于开发 将编译好的服务打包docker镜像运行 提供各种docker镜像包&…

2024年BCSP-X小学低年级组初赛真题

BCSP-X小低组基础知识测评 一、单项选择题(共15题,每题2分,共计30分) 一般用哪种软件来编写C++的代码: A. 编译器 B. 编辑器 C. 调试器 D. 浏览器下面哪个是编写一个 C++程序不可缺少的内容: A. 变量 B. main 雨数(程序人口) C. 输人语句 D. 输出语句出租车的计费规则是:当行驶…

AI工具:如何通过智能助手简化工作流程?

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

Delphi

Delphi&#xff0c;是美国 Borland&#xff08;宝兰&#xff09;公司於 1995 年开发在 Windows 平台下的快速应用程式开发工具 (Rapid Application Development&#xff0c;简称 RAD)&#xff0c;它的前身是在 DOS 下的产品 Borland Turbo Pascal。&#xff08;非开源软件&…

【二叉树】Leetcode 103. 二叉树的锯齿形层序遍历【中等】

二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输入&#xff1a;roo…

Kimichat使用案例007:用kimichat批量重命名txt文本文件

文章目录 一、介绍二、txt文件集三、Kimi操作内容四、Kimi输出内容一、介绍 一个文件夹中有很多个txt文本文件,需要全部进行重命名。 二、txt文件集 三、Kimi操作内容 可以在kimichat中输入提示词: 你是一个Python编程专家,要完成一个关于批量重命名txt文本文件的Python脚本…

产品经理的需求善变,利用规则引擎减少80%的需求变更成本

经常有技术团队的小伙伴抱怨最烦的就是产品经理发起需求变更&#xff0c;才做了三周&#xff0c;改了八回需求...... 其实这个故事&#xff0c;每天都在开发团队中上演&#xff0c;作为 IT的 leader 来透视这个问题&#xff0c;要辩证的看待&#xff0c;其实80% 的可能性都是如…

《对马岛之魂:导演剪辑版》新鲜出炉,AOC电竞显示器与你并肩作战!

超越PS版本的画面表现&#xff0c;AOC U27G3XM助你轻松拉满游戏体验&#xff01; 近日&#xff0c;《对马岛之魂&#xff1a;导演剪辑版》正式登陆PC平台。这款备受期待的作品不仅在战斗机制和故事内容上进行了创新&#xff0c;还引入了更高级的图形选项和更丰富的自定义设置。…

我的创作纪念日-成为CSDN创作者的 第4096天

机缘 在我成为创作者的旅程中&#xff0c;有几个关键的机缘让我开始了这个旅程&#xff1a; 1、实战项目中的经验分享&#xff1a; 在参与各种实战项目的过程中&#xff0c;我积累了大量的经验和知识。意识到这些经验对其他人可能也有帮助&#xff0c;我开始将它们记录下来&…

SwiftUI中的AnyLayout的理解与使用以及自定义Layout

AnyLayout是SwiftUI中的一个类型擦除容器&#xff0c;它可以包装任何遵循Layout协议的布局。这意味着我们可以使用AnyLayout来抽象具体的布局类型&#xff0c;从而在运行时决定使用哪种布局。这种灵活性极大地增强了UI组件的可重用性和适应性。 AnyLayout可以在保持视图identi…

Android 绑定服务的5个问题。

1.android studio 目录结构改变了。为什么会报R 资源文件找不到。 在写项目的时候经常需要改到。 gradle文件里的域名名字要改变下。 2.Caused by: android.app.BackgroundServiceStartNotAllowedException: Not allowed to start service Intent { cmpcom.zjtzsw.sbkDevice/…

oracle 数字或者小数格式化

select trim(. from to_char(1,fm9999990.9999)),trim(. from to_char(0.1,fm9999990.9999)) from dual

视觉SLAM十四讲:从理论到实践(Chapter8:视觉里程计2)

前言 学习笔记&#xff0c;仅供学习&#xff0c;不做商用&#xff0c;如有侵权&#xff0c;联系我删除即可 一、目标 1.理解光流法跟踪特征点的原理。 2.理解直接法是如何估计相机位姿的。 3.实现多层直接法的计算。 特征点法存在缺陷&#xff1a; 二、光流(Optical Flow) …

【Qt知识】Qt中的对象树是什么?

在深入Qt编程的世界时&#xff0c;你会频繁遇到一个核心概念——对象树&#xff08;Object Tree&#xff09;。这个概念是Qt框架管理内存、处理事件和组织用户界面元素的基础。 什么是Qt对象树&#xff1f; 如果你的Qt应用程序就像一片茂盛的森林&#xff0c;而这片森林中的每…

multisim仿真电路图

在Multisim中进行电路仿真时,创建和配置电路图通常涉及一系列步骤。以下是创建和配置 Multisim仿真电路图的详细步骤,以确保格式清晰并充分参考了相关文章中的信息: 1. 创建电路图 打开Multisim软件。 选择“新建电路图文件”或使用快捷键Ctrl+N。 在新建的电路文件中,…

C++学习笔记(22)——多态

目录 [TOC](目录) 比喻与理解1. 多态的概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写2.3.1 虚函数重写的两个例外&#xff1a;1. 协变(基类与派生类虚函数返回值类型不同)2. 析构函数的重写(基类与派生类析构函数的名字不同) 2.4 C11 override 和 final2…