MybatisPlus_插入或更新数据时自动填充属性

一.添加注解

    //插入时更新字段
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    //插入时与修改时更新字段
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

二.自定义实现类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());
        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());
    }
}

注: 

strictInsertFill、strictUpdateFill

为严格填充,属性存在值不覆盖,填充值为null不填充

若update语句中的User对象来自于查询,其中update_time字段已存在属性值,使用严格填充将不会对update_time字段进行更新

为避免以上情况,可选择对User对象进行设置:

setUpdateTime(null)

或使用通用填充:

setFieldValByName
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill");
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill");
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

运行效果

第六行为新插入的数据

进行一次更新,将年龄设置为6岁:

可以看到update_time字段发生了改变

题外话:在创建数据库之初实现自动更新日期

 

在创建数据库字段时,选择类型datetime,填写默认值CURRENT_TIMESTAMP(切记创建时填写),并为update_time勾选根据当前时间戳更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值