当前位置: 代码网 > it编程>编程语言>Java > Mybatis-plus在新增或修改时如何自动插入或修改某个字段值

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

2026年04月24日 Java 我要评论
一 效果在新增user表的数据时,createtime为null使用mybatis-plus自带的save方法新增后,在数据库中有自动插入的当前时间的值二 实现原理metaobjecthandler:

一 效果

在新增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);

    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com