一.问题描述:Mybatis-plus自动填充创建时间和修改时间无效记录
二.问题原因:没有把MyMetaObjectHandler 类交给spring容器管理,需要在实现这个接口MetaObjectHandler的实现类上加上@Component
三.实现Mybatis-plus自动填充创建时间和修改时间的全代码,亲测有效:
**1.**引入Mybatis-plus插件
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
**2.**配置填充的字段和值
package com.tongji.cloud.framework.utils;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @description: 时间填充
* @author: qw
* @create: 2021-09-16 14:35
**/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
3.实体类里面字段加入@TableField注解并设置想要的效果
@TableField(fill= FieldFill.INSERT)
@ApiModelProperty(value="上传时间")
private Date createTime;
@TableField(fill=FieldFill.UPDATE)
@ApiModelProperty(value="最后上传时间")
private Date updateTime;
四:踩坑趣事
mysql也对这张表的创建时间和修改时间做了更新时间戳,后台代码也做了填充时间,导致执行修改命令时创建时间和修改时间都变了,取消掉mysql的自动时间戳,想要的效果就出来了。