Mybatis-plus使用@TableField(fill = FieldFill.UPDATE)完成自动填充字段如保存更新时自动更新时间

news2024/12/24 21:46:50

📚目录

    • 填充策略枚举介绍
    • 自定义填充策略枚举的数据
    • 测试用例
      • 插入填充
      • 更新填充
    • 结尾

填充策略枚举介绍

      使用mybatis-plus完成字段的填充,使用起来也比较方便,当我们往数据库插入一条数据时我们不需要在给指定字段上new Date() ,而是使用mybatis-plus的注解完成@TableField(fill = FieldFill.UPDATE)完成.并且提供了4种策略枚举让我们使用.按照自己的使用场景进行使用.

在这里插入图片描述
    我们通常会创建一个实体类基类用于继承,该基类上的字段在所有表中都应该存在,比如说创建时间,更新时间,创建者,更新者等信息.

例如我创建的基类

在这里插入图片描述
    在这里使用了2种策略枚举分别是FieldFill.INSERT 插入填充 ,FieldFill.UPDATE 更新填充,在实体类配置完还不够因为它并不知道我想填充什么数据,这个填充数据要我们自己来定义.

自定义填充策略枚举的数据

MetaObjectHandler接口是mybatis-plus为我们提供的的一个扩展接口,我们需要实现更新接口updateFill和创建接口insertFill并通过MetaObject的getValue方法获取我们需要做处理的值如更新的字段名.

创建MyMetaObjectHandler实现MetaObjectHandler接口

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    private final static String CREATE_BY = "createBy";
    private final static String CREATE_TIME = "createTime";
    private final static String UPDATE_BY = "updateBy";
    private final static String UPDATE_TIME = "updateTime";
    /**
     * 插入元对象字段填充(用于插入时对公共字段的填充)
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        try {
            Object createTime = metaObject.getValue(CREATE_TIME);
            Object createBy = metaObject.getValue(CREATE_BY);
            if (ObjectUtils.isNull(createTime)) {
                this.setFieldValByName(CREATE_TIME, new Date(), metaObject);
            }
            if (ObjectUtils.isNull(createBy)){
                //后续可以通过获取当前登录对象进行获取账号并设置我这边演示就默认cr
                this.setFieldValByName(CREATE_BY, "cr", metaObject);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 更新元对象字段填充(用于更新时对公共字段的填充)
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        try {
            Object updateTime = metaObject.getValue(UPDATE_TIME);
            Object updateBy = metaObject.getValue(UPDATE_BY);
            if (ObjectUtils.isNull(updateTime)) {
                this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
            }
            if (ObjectUtils.isNull(updateBy)){
                //后续可以通过获取当前登录对象进行获取账号并设置我这边演示就默认up
                this.setFieldValByName(UPDATE_BY, "up", metaObject);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

由于演示项目所以并没有涉及到登录获取当前用户信息等操作,所以这里的更新和创建用户都使用默认值表示,看是否有效果.

测试用例

插入填充

在这里插入图片描述

打断点查看,由于我们没有给创建时间赋值所以是null,那么我们自己new Date()时间进去

在这里插入图片描述

插入日志:

在这里插入图片描述

数据库数据

在这里插入图片描述

更新填充

通过Id进行更新

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据库数据

在这里插入图片描述

结尾

通过这一系列的操作后,我们就可以不需要在业务代码中手动添加时间等字段,这样不是优雅起来了.

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

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

相关文章

VMware 安装 Centos7 超详细过程

CentOS系统,安装教程可参考以下: 哪些模型需要在Linux下运行,需提前预装Linux系统呢,评论区讨论吧 比如Noah-MP 5.0模型 1.软硬件准备 软件:推荐使用 VMware,我用的是 VMware 12 镜像:CentO…

全脑建模:过去、现在和未来

什么是全脑建模? 全脑建模(WBM)是计算神经科学的子领域,涉及近似全脑神经活动的计算和理论模型。该方法的目标是研究神经活动的宏观时空模式如何由解剖连接结构、内在神经动力学和外部扰动(感觉、认知、药理、电磁等)的相互作用产生。这种宏观现象及其模…

在firefox浏览器下破解hackbar

目录 一、介绍: 二、安装教程 1、打开firefox浏览器插件管理扩展 2、在firefox浏览器下安装老版本Hackbar (1)首先删除之前安装的Hackbar插件: (2)采用从文件安装附件添加组: (3…

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中,发现系统可以识别到此U盘,但是打不开,查询后发现需要安装exfat-utils库才行。 解决方案: 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…

Python安装指南(Windows版)

安装python环境 官网下载地址: Download Python | Python.org 我选择3.10.4版本,当然你也可以选择其他版本 安装 安装完成,需要验证是否安装成功。 打开CMD窗口,输入python命令,如果进入如下python窗口则安装成功&…

3D点云处理:栅格化点云(附源码)

文章目录 0. 测试效果1. 基本内容2. 代码实现文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:将点云进行栅格化操作;应用:一般可应用于点云的体积计算等;0. 测试效果 1. 基本内容 点云栅格化是将三维点云数据投影到二维栅格(或像素)网格上的过程。这种操作…

无涯教程-JavaScript - QUARTILE函数

QUARTILE函数取代了Excel 2010中的QUARTILE.INC函数。 描述 该函数返回数据集的四分位数。四分位数通常用于销售和调查数据中,以将人群分为几类。 语法 QUARTILE (array,quart)争论 Argument描述Required/OptionalArrayThe array or cell range of numeric values for whi…

SpringBoot-学习笔记(基础)

文章目录 1. 概念1.1 SpringBoot快速入门1.2 SpringBoot和Spring对比1.3 pom文件坐标介绍1.4 引导类1.5 修改配置1.6 读取配置1.6.1 读取配置信息1.6.2 读取配置信息并创建类进行封装 1.7 整合第三方技术1.7.1 整合JUnit1.7.1 整合Mybatis1.7.1 整合Mybatis-Plus1.7.1 整合Drui…

stm32HAL库 G4 SPI 从机DMA可变长度接受数据乱码问题

使用一个引脚当作SPI CS, 边沿触发; 在电平位0时候接受SPI数据20个字节 如果实际主机只发了小于20字节时候, 下一个帧就会错乱; 去老外找了之后,需要复位SPi RCC时钟才能复位掉SPI 下面的不行 正确的做法

Redis集群操作-----主从互换

一、将节点cluster1的主节点7000端口的redis关掉 [rootredis-cluster1 src]# ps -ef |grep redis 二、查看集群信息:

JavaScript实现系统级别的取色器、EyeDropper、try、catch、finally

文章目录 效果图htmlJavaScript关键代码EyeDroppertry...catch颜色值相减(色差)的传送门 效果图 html <div class"d_f fd_c ai_c"><button id"idBtn" class"cursor_pointer">开始取色</button><div id"idBox" c…

Java-Optional类

概述 Optional是JAVA 8引入的一个类&#xff0c;用于处理可能为null的值。 利用Optional可以减少代码中if-else的判断逻辑&#xff0c;增加代码的可读性。且可以减少空指针异常的发生&#xff0c;增加代码的安全性。 常用的方法 示例 代码 public class OptionalTest {pub…

我能“C“——指针进阶(上)

目录 指针的概念 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 阅读两段有趣的代码&…

2023年打脸面试官之TCP--瞬间就懂

1.TCP 三次握手之为什么要三次呢&#xff1f;事不过三&#xff1f; 过程如下图&#xff1a; 先来解释下上述的各个标志的含义 序列号seq&#xff1a;占4个字节&#xff0c;用来标记数据段的顺序&#xff0c;TCP把连接中发送的所有数据字节都编上一个序号&#xff0c;第一个字节…

python3.11教程2:基础数据类型(数字和字符串)、组合数据类型(集合、元组、列表、字典)

文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用 5.3 布尔类型5.4 字符串5.3.1 字符串的基本操作5.3.2 字符串函…

揭秘大厂面试成功秘籍:V2.0版面试指南全新上线

我们程序员这一群体&#xff0c;大家都知道最好的涨薪方法是通过跳槽&#xff0c;在你把一个公司的精华都吸收完之后&#xff0c;有追求的肯定会跳去更好的公司发展自己&#xff0c;特别在金三银四&#xff0c;金九银十这样的招聘旺季里 &#xff0c;会有很多需要准备的面试会有…

Nginx配置及优化3

Nginx配置及优化3 一、网页状态页二、nginx第三方模块2.1、echo模块 三、变量3.1、内置变量3.1.1、常用的内置变量3.1.2、举个例子 3.2、自定义变量 四、自定义访问日志优化4.1、自定义访问日志的格式4.2、自定义json格式日志 五、nginx压缩功能六、HTTPS功能6.1、nginx的HTTPS…

【C语言】字符函数,字符串函数,内存函数

大家好&#xff01;今天我们来学习C语言中的字符函数&#xff0c;字符串函数和内存函数。 目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 1.2.1 tolower&#xff08;将大写字母转化为小写字母&#xff09; 1.2.2 toupper&#xff08;将小写字母转化为大写字母&…

把c++的函数导出为dll文件

目录 什么是dll文件 把c函数变为dll有什么好处 开始教程 打开Visual Studio 2022创建 调整编译器设置 创建头文件 DLL1.h 创建源文件编辑函数内容 DLL1.cpp 编译成dll文件 什么是dll文件 DLL&#xff08;Dynamic Link Library&#xff0c;动态链接库&#xff09;是一种…