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,一经查实,立即删除!

相关文章

智绘“水蓝图”,宏电亮相第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…

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

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

【二叉树】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;还引入了更高级的图形选项和更丰富的自定义设置。…

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;而这片森林中的每…

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

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

如何保证每次画出的都同一张人脸?AI绘画Stable Diffusion的Reference only教程

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

【Python Cookbook】S01E16 同时对数据做转换和换算

目录 问题解决方案讨论 问题 当换算&#xff08;sum(), min(), max()&#xff09;同时遇到转换或筛选&#xff0c;怎么做&#xff1f; 解决方案 有一种非常优雅的方法&#xff0c;可以将数据换算和转换结合在一起——在函数参数中使用 生成器表达式。 一个直观的案例&#…

ATA-7030高压放大器应用分享:铁电体和压电材料

经过多年研究探索&#xff0c;Aigtek安泰电子功率放大器目前已拥有一众完善的系列功放产品&#xff0c;可为超声测试、生物医疗、水声测试、压电驱动、电磁驱动、MEMS测试等众多研究项目提供系统性的行业测试方案&#xff0c;其中对于压电极化测试、铁电极化测试&#xff0c;Ai…

GPT-4o:人工智能新纪元的突破与展望

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

香橙派AI Pro开箱初体验

一、前言 上周很荣幸在CSDN上收到香橙派的测评邀请&#xff0c;这是一款专为边缘计算和嵌入式AI应用设计的高性能计算平台。因为之前一直做的是GPU Tensorrt部署相关工作&#xff0c;对边缘计算平台也不是很熟悉&#xff0c;花了一些时间摸索&#xff0c;今天我就简单与大家分…

动态二维码与静态二维码,有何区别,如何使用?

近年来&#xff0c;二维码势不可挡席卷而来&#xff0c;并在我们的生活中占据了一席之地&#xff0c;付款、加好友、点餐、活动签到、电子门票、商品信息查询、分享内容等等&#xff0c;哪都有它。 二维码诞生于日本&#xff0c;就是用特定几何图形&#xff0c;按规律在平面上分…

使用python绘制华夫饼图

使用python绘制华夫饼图 华夫饼图效果代码 华夫饼图 华夫饼图&#xff08;Waffle Chart&#xff09;是一种数据可视化图表&#xff0c;用于显示数据在一个网格中的分布情况。它类似于饼图&#xff0c;通过将数据划分为等大小的方块来表示不同类别的比例。华夫饼图的优势在于它…