mybatis-plus设置自动填充字段(更新时间,创建时间等)
·
问题概述
在进行项目开发时,有时需要插入一些用户不必传入的字段,比如某条数据的更新时间,创建时间,但是这样一来就没法调用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,自动填充不会生效。
最后附官方文档的地址,如果我写的不详细可以直接看官方文档。
更多推荐



所有评论(0)