前言和简介
(这个比较简单,就是执行insert操作的时候放一个新增时间,update的时候放一个修改时间)
这个是自己学习时候记得笔记要是想详细了解可以去MP官网,上边有更详细的配置流程以及视频教学:MyBatis-Plus
实现
- 实体类和数据库中加入相应的insertTime、updateTime字段
并在实体类中通过指定@TableField中的fill属性来确定何时填充
// 修改时设置的修改时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
// 新增时设置的新增时间
@TableField(fill = FieldFill.INSERT)
private Date createTime;
- 新建填充处理器,设置填充值
// 填充处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
}
3. 执行插入操作
Service
public void insertType(Type type) {
this.typeMapper.insert(type);
}
Controller
@RequestMapping("/insert")
public void insertType(){
Type type = new Type();
// type.setId(7);
// type.setName("abc");
type.setParentId(2);
type.setMark("你好");
this.typeService.insertType(type);
}
执行结果:update_time和create_time字段都执行的自动填充
4. 执行更新操作
Service
public void updateType(){
Type type = new Type();
type.setTypeId(1);
type.setName("你不是250");
typeMapper.updateById(type);
}
执行sql时updateTime自动填充
优化
- 并不是所有的数据都需要createTime和updateTime这两个属性的,有的属性不需要这些值的时候,MetaObjectHandler仍为这些值添加数据,则可以对insertFill进行优化
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasSetter("createTime")) { // 判断添加时有没有createTime这条属性
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
if (metaObject.hasSetter("updateTime")){ // 判断添加时有没有updateTime这条属性
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
}
- 更新时,自己设置更新时间,此时不需要更新填充
@Override
public void updateFill(MetaObject metaObject) {
// 查看在执行update的时候是不是已经设置了updateTime值
if (null == getFieldValByName("updateTime", metaObject)) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
}
- 更新时如果使用UpdateWrapper来进行set时,如果不指定updateTime是不会自动填充的