问题概述

在进行项目开发时,有时需要插入一些用户不必传入的字段,比如某条数据的更新时间,创建时间,但是这样一来就没法调用mybatis-plus的默认接口,简易快捷进行开发了。

这在mybatis-plus官方文档上写了解决方法,我们在插入和修改数据时,可以让它自动设置某些字段。

具体步骤


1、使用TableField注解的fill字段。

代码

@TableField(value = "create_time",fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

说明

fill这个字段就是在配置自动填充,它的值是自动填充的时机。有这四个选项

INSERT是仅在插入时自动填充;UPDATE时仅在更新时自动填充;INSERT_UPDATE时更新和插入时都进行自动填充。DEFAULT是默认,不设置这个字段的话默认就是DEFAULT,也就是不进行自动填充。

2、编写配置类

代码

这里拿更新时间和创建时间举例:

package com.example.demo.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        // 新增时自动填充 create_time, update_time 字段
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        // 更新时自动修改 update_time 字段
    }
}

说明

有三个注意点:

1、必须把这个类注册为bean,可以用@Component注解。

2、实现MetaObjectHandler这个接口,里面的两个方法分别对应插入和更新。

3、方法内的代码中,strictInsertFill和strictUpdateFill分别对应插入和更新操作,都有四个字段。

this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());

第一个字段是 MyBatis 的反射封装对象,不要改;

第二个是要进行自动填充的字段名,与你的要进行自动填充的实体类的变量名保持一致;

第三个是要进行自动填充的数据类型,比如如果要自动填充的是Long类型,就写Long.class。

第四个是自动填充的数据内容。

总结与其它注意事项

完成这两步之后就可以进行字段的自动填充了。

但只可以用于mybatis-plus的BaseMapper中默认的插入和修改方法,如果是自己写的sql,自动填充不会生效。

最后附官方文档的地址,如果我写的不详细可以直接看官方文档

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐