Mybatis-plus在新增或修改时如何自动插入或修改某个字段值
一 效果
咱们先来看一个实际场景:当你向User表新增一条数据时,如果手动传入的createTime字段是null,会发生什么?
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

别担心,这正是MyBatis-Plus的“魔法”生效之处。使用它自带的sa ve方法执行新增后,你再查看数据库,会发现createTime字段已经被自动填上了当前时间戳。

二 实现原理
MetaObjectHandler:元数据对象处理器
核心机制:
实现这一自动填充功能的幕后功臣,正是MetaObjectHandler接口。这个接口是MyBatis-Plus框架提供的一个关键扩展点,它允许我们在数据插入或更新的关键时刻,为指定字段赋予默认值。
典型应用场景:
哪些字段最需要它?答案就是那些几乎每个表都有的公共字段。比如记录数据生命周期的updateTime(更新时间)、createTime(创建时间),或者追踪操作人的createUser(创建人)、updateUser(更新人)。利用这个处理器,就能一劳永逸地解决这些字段的赋值问题。
三 使用步骤
第一步:在实体类的公共字段上添加@TableField注解
注解中的fill属性是关键,它决定了字段在何时被自动填充:
@TableField(fill = FieldFill.INSERT):此字段仅在执行插入(新增)操作时填充;@TableField(fill = FieldFill.INSERT_UPDATE):此字段在新增和更新(修改)操作时都会填充;@TableField(fill = FieldFill.UPDATE):此字段仅在执行更新操作时填充。
通过下面这段代码可以看得更明白。在Article实体中,createTime和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注解,确保它能被Spring容器扫描并管理。
具体实现可以参考以下代码:
@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);
}
}
总结
总的来说,MyBatis-Plus通过MetaObjectHandler提供的自动填充机制,极大地简化了公共字段的处理逻辑,让开发者能从重复的赋值代码中解放出来。希望以上的梳理和示例,能为你实际开发提供清晰的指引。
您可能感兴趣的文章:
- MyBatis-Plus更新对象时将字段值更新为null的四种常见方法
- MyBatis-plus更新对象时将字段值更新为null的实现方式
- Mybatis-plus设置某个字段值为null的方法总结
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Debian Java远程控制如何操作
Debian Ja va远程控制的常用方式与操作要点 对于需要在Ja va环境中远程管理Debian服务器的开发者来说,掌握几种核心的远程控制方式至关重要。这不仅能提升运维效率,也是构建分布式应用的基础能力。下面,我们就来梳理一下几种主流方案及其操作要点。 一、SSH与JSch远程执行与文件传输 先
Debian Compton如何与其他图形工具协同
Debian 下 Compton 与图形工具的协同指南 一 基础认知与适用场景 首先得明确一点:Compton 是专为 X11 设计的窗口合成器,它的本职工作就是处理窗口的合成、阴影、透明度这些视觉效果。这就意味着,它必须运行在 Xorg 会话下,无法直接用在 Wayland 上。如果你用的是 GN
Ubuntu上PyTorch与其他框架如何对比
Ubuntu上 PyTorch 与其他框架对比 面对众多深度学习框架,在Ubuntu上做选择时,你是不是也感到过一丝纠结?别担心,这份对比指南,或许能帮你快速理清思路。 一 快速选择建议 先说几个核心判断,帮你直接定位: 如果你的重心是研究原型、LLM 多模态,并且需要灵活调试与快速迭代:优先选择
如何利用Filebeat进行日志备份
Filebeat日志备份与保留策略 核心概念与总体思路 首先得明确一点:Filebeat的核心职责是“采集与转发”日志,它本身并不负责长期存储。换句话说,它是个高效的搬运工,而不是仓库管理员。那么,真正的“备份”和“保留”工作,得在它的下游环节来完成。 通常的做法是,将日志发送到Elasticsea
如何通过Filebeat进行故障排查
Filebeat故障排查实操指南 处理Filebeat的疑难杂症,最怕的就是东一榔头西一棒槌,没有章法。其实,一套清晰的排查流程,往往能让你事半功倍。下面这份指南,就为你梳理出一条从快速定位到深度解决的路径。 一 快速定位流程 当发现日志数据流中断时,别急着翻配置文件,先按这个“五步法”走一遍,大多
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

