文章目录
- 一、前言
- 二、MyBatis-Plus自动填充功能实现
- 2.1、实体类上增加注解
- 2.2、自定义填充类编写
一、前言
我们在建表的时候,所有的表都会有create_id(创建人id)、create_time(创建时间)、update_id(更新人id)、**update_time(更新时间)**这几个字段,属于是公共字段。
- 在新增数据时:将创建人、更新人设置成当前系统登录人,将创建时间、更新时间设置成当前时间
- 在更新数据时:将更新人设置成当前系统登录人,将更新时间设置成当前时间
因为每张表里都有这些字段,而每次我们新增修改数据,都需要更新这些字段,即使是抽出共通方法,代码也很冗余
二、MyBatis-Plus自动填充功能实现
官方文档地址:https://baomidou.com/pages/4c6bcf/
2.1、实体类上增加注解
在需要自动填充的实体类字段上需要加上注解,这里推荐建一个共通父类,所有实体类都继承该父类,避免在每个实体类中重复编写
2.2、自定义填充类编写
写一个类实现 com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
接口,实现其 insertFill(MetaObject metaObject)
方法和 updateFill(MetaObject metaObject)
方法
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
String userId = getUserId();
this.strictInsertFill(metaObject, "createId", String.class, userId);
this.strictInsertFill(metaObject, "updateId", String.class, userId);
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
String userId = getUserId();
this.strictUpdateFill(metaObject, "updateId", String.class, userId);
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
private String getUserId() {
//自己实现,从上下文中获取当前登录的用户id
}
}
这里使用的是 strictInsertFill
和 strictUpdateFill
这种严格字段填充,不仅字段名称、字段类型要和数据库一致,而且实体类中这些要填充的字段要是空的时候,才会填充