您现在的位置是: 首页 > 后端开发 记一次 Mybatis-Plus 自动填充无效问题解决
记一次 Mybatis-Plus 自动填充无效问题解决
2020-05-27 【后端开发】 7913人已围观 14778次浏览
简介记一次 Mybatis-Plus 自动填充无效问题解决
当前使用的版本
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
需要实现的是添加时间和修改时间自动更新维护,参考官方文档,在项目中新增了自定义实现类 MyMetaObjectHandler (部分不需要的代码已经删除)
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
}
}
然后在实体类中,新增注解
public class User {
// 注意!这里需要标记为填充字段
@TableField(fill = FieldFill.INSERT)
private String createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateTime;
....
}
因为不想数据库中存在 null 值的数据,所以 updateTime 修改为 INSERT_UPDATE,根据官网的说明,该注解应该是在插入和更新时,都会自动填充该字段数据
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
}
但在实际使用的过程中发现,执行 save 方法,并不会自动填充 updateTime 字段,也就是数据库中 updateTime 字段为 null ,执行 update 方法后,updateTime 才自动填充上数据。
一开始以为是源码有问题,后来查看源码和参考官方的示例后发现,如果字段注解设置为 INSERT_UPDATE ,则不仅需要在 updateFill 上添加,同时也需要在 insertFill 上添加,修改如下
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
}
}
这样才能做到在执行 save 方法时,也自动填充 updateTime 字段。
仅以此文记录自己犯下的错误,吸取教训。
很赞哦! (0)
相关文章
- start.spring.io访问太慢,构建SpringBoot项目失败
- springboot引入mybatis-plus后出现ClassNotFoundException: org.mybatis.logging.LoggerFactory
- 删除Git仓库所有历史提交记录,成为一个干净的仓库
- Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR DISABLE You can't write or read against a disable instance
- mac idea spring boot 启动慢
- SqlServer 优化技巧
- 类 BASE64Decoder 程序包 sun.misc 找不到符号
- PHP 中list()出现Undefined offset: 0错误
- SpringBoot 定时任务 多线程
- RocketMQ 出现 sendDefaultImpl call timeout 问题
点击排行
- Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR DISABLE You can't write or read against a disable instance
- Debian apt 使用国内镜像
- RocketMQ 出现 sendDefaultImpl call timeout 问题
- 类 BASE64Decoder 程序包 sun.misc 找不到符号
- SpringBoot @NotBlank 不生效问题
- 记一次 Mybatis-Plus 自动填充无效问题解决
- SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
- nuxt 项目完整部署方案
站长推荐
猜你喜欢
- linux下各文件夹的结构说明及用途介绍
- Chrome 谷歌浏览器清除HTTPS证书缓存
- Mac禁用Adobe Creative Cloud自启状态栏
- Debian apt 使用国内镜像
- Win10 安装适用于Linux的Windows子系统
- Debian/Ubuntu无netstat命令解决方案
- cmder vim方向键无法使用 解决方案
- SpringBoot 启动提示 Requested bean is currently in creation: Is there an unresolvable circular reference?
- Mac 设置允许任何来源
- 查看MySQL默认读取的配置文件