Mybatis-plus在新增或修改时如何自动插入或修改某个字段值

 更新时间:2026年04月24日 09:51:44   作者:谁家好人当程序员啊  
文章讲述了MyBatis-Plus中MetaObjectHandler接口的使用方法,通过在实体类中添加@TableField注解并实现MetaObjectHandler接口的insertFill和updateFill方法,为新增和更新操作时自动填充公共字段如createTime、updateTime等的默认值

一 效果

在新增User表的数据时,createTime为null

使用mybatis-plus自带的save方法新增后,在数据库中有自动插入的当前时间的值

二 实现原理

MetaObjectHandler:元数据对象处理器

说明:

MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值

使用场景:

公共字段填充,如updateTime、createTime、createUser、updateUser等公共字段的填充。

三 使用步骤

在实体类的公共字段上添加@TableField注解

  • @TableField(fill = FieldFill.INSERT):表示此字段只在插入/新增操作时更新数据;
  • @TableField(fill = FieldFill.INSERT_UPDATE):表示此字段在新增和修改操作时都更新数据;
  • @TableField(fill = FieldFill.UPDATE):表示此字段只在修改操作时更新数据;

如下面代码中,createTime,updateTime,createUser都会在新增时更新数据,updateTime还会在修改时更新数据

@TableName(value = "article")
@Data
public class Article implements Serializable {
    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    /**
     * 图片地址
     */
    private String pictureUrl;
    /**
     * 标题
     */
    private String title;
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private String createTime;
    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateTime;

    /**
     * 创建人
     */
    @TableField(fill = FieldFill.INSERT)
    private String createUser;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

创建配置类实现MetaObjectHandler接口

实现MetaObjectHandler接口,重写insertFill、updateFill方法

使用接口中的setFieldValByName方法,找到我们之前的几个字段,并给字段赋值

不要忘记@Component 注解

如下代码:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), metaObject);
        this.setFieldValByName("updateTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), metaObject);    
        this.setFieldValByName("createUser", currrentUser.getNickname(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), metaObject);

    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringSecurity 表单登录的实现

    SpringSecurity 表单登录的实现

    本文主要介绍了SpringSecurity 表单登录的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java别说取余(%)运算简单你真的会吗

    Java别说取余(%)运算简单你真的会吗

    这篇文章主要介绍了Java别说取余(%)运算简单你真的会吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • minio的下载和springboot整合minio使用方法

    minio的下载和springboot整合minio使用方法

    本文介绍了如何通过Docker拉取MinIO镜像,并创建MinIO容器的过程,首先,需要在本地创建/data和/conf两个目录用于挂载MinIO的数据和配置文件,接下来,通过docker run命令启动容器,设置MinIO的访问端口、用户名、密码等信息,感兴趣的朋友一起看看吧
    2024-09-09
  • Spring整合MyBatis的三种方式

    Spring整合MyBatis的三种方式

    这篇文章主要介绍了Spring整合MyBatis的三种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • IntelliJ IDEA2022中的Java文档注释设置、操作方法

    IntelliJ IDEA2022中的Java文档注释设置、操作方法

    这篇文章主要介绍了IntelliJ IDEA2022中的Java文档注释设置、操作详述,本文通过图文并茂的方式给大家介绍IDEA2022 文档注释设置方法,需要的朋友可以参考下
    2022-08-08
  • Java代理模式之静态代理与动态代理详解

    Java代理模式之静态代理与动态代理详解

    Java代理分为静态代理和动态代理,静态代理需手动编写代理类,适合少量对象,动态代理运行时自动生成代理类,适用于大量对象,如Spring AOP,这篇文章主要介绍了Java代理模式之静态代理与动态代理的相关资料,需要的朋友可以参考下
    2026-01-01
  • java nio基础使用示例

    java nio基础使用示例

    传统的io技术为阻塞的,java新nio是非阻塞的,注册一个op_read事件,注册到selector对象上,当有数据到来时候,selector回通知之前注册事件的对象,进行read处理,看面我看看它是如何使用的
    2013-11-11
  • JavaAgent实现http接口发布方式浅析

    JavaAgent实现http接口发布方式浅析

    这篇文章主要介绍了JavaAgent实现http接口发布方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • Java终止线程的两种方法

    Java终止线程的两种方法

    本文主要介绍了Java终止线程的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java集合的总体框架相关知识总结

    Java集合的总体框架相关知识总结

    今天带大家学习Java集合框架的相关知识,文中有非常详细的图文介绍,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论