4. MyBatis Plus自动填充
-
创建时间,修改时间都是自动化完成的,不需要手动更新
-
几乎所有的数据库表都需要有以下两个字段 gmt_create、gmt_modified
-
自动填充分为两种方式
4.1 方式一:数据库级别
第一步:数据操作
- 在数据库添加两个新的字段
- 需要设置数据类型为datetime 需要指定默认时间为当前时间CURRENT_TIMESTAMP 更新的话需要勾选
第二步实体类操作
- 将实体类同步并测试
private Date gmtCreate;
private Date gmtModified;
第三步:做测试
-
原数据库信息
-
更新后数据库信息
4.2 方式二:代码级别
第一步:数据库操作
- 只添加两个字段,其余操作删除
第二步:在实体类的属性上添加注解
- @TableField
//字段添加填充内容
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
- FieldFill是一个枚举类 (用于填充字段)
值 | 描述 |
---|---|
DEFAULT | 默认不处理 |
INSERT | 插入时填充字段 |
UPDATE | 更新时填充字段 |
INSERT_UPDATE | 插入和更新时填充字段 |
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入时填充字段
*/
INSERT,
/**
* 更新时填充字段
*/
UPDATE,
/**
* 插入和更新时填充字段
*/
INSERT_UPDATE
}
第三步:编写处理器来处理这个注解
-
第一个编写的容器一定要加入到spring的IOC容器中
-
第二个编写的处理器要实现mybatis-plus的MetaObjectHandler接口
-
第三个调用接口的setFieldValByName方法传入三个字段分别为字段名称、字段值、metaObject对象(源码在行中)
package com.xuan.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.HashSet;
/**
* xuan
* 2020/7/21
* 1870136088@qq.com
**/
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
/**
* 通用填充
* fieldName java bean property name
* fieldVal java bean property value
* metaObject meta object parameter
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill");
this.setFieldValByName("gmtCreate", new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
//更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill");
this.setFieldValByName("gmtModified", new Date(),metaObject);
}
}
第四步:测试 这里的测试跟上一步一样就不写出来了(测试是成功的)