整点活,MyBatis-Plus学习笔记(自动填充)

前言和简介

(这个比较简单,就是执行insert操作的时候放一个新增时间,update的时候放一个修改时间)
这个是自己学习时候记得笔记要是想详细了解可以去MP官网,上边有更详细的配置流程以及视频教学:MyBatis-Plus

实现

  1. 实体类和数据库中加入相应的insertTime、updateTime字段
    并在实体类中通过指定@TableField中的fill属性来确定何时填充
    // 修改时设置的修改时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // 新增时设置的新增时间
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
  1. 新建填充处理器,设置填充值
// 填充处理器
@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自动填充
自动填充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是不会自动填充的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值