在 SpringBoot + Mybatis-Plus 的项目中,我们可以通过一个拦截器来实现数据的自动填充
定义一个拦截器,实现 MetaObjectHandler 接口,实现其中的 insertFill 和 updateFill 方法,并将其注册到 Spring 容器中
package com.ghdi.svc.tech.modules.comm.handlers;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @ClassName: MyMetaObjectHandler
* @Author: fang
* @Description:
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
//SpringSecurity中获取当前登录用户的方式,读者可以根据项目实际情况去获取当前登录用户
UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
this.setFieldValByName("createUser", principal.getUsername(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
上面两个实现的方法,insertFill 表示数据插入时的数据填充,updateFill 表示数据更新时的数据填充,metaObject 是当前操作的对象
之后再实体类需要实现填充数据的字段上加上注解
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT)
private Date createUser;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
fill 是用来指定自动填充策略的,其中 FieldFill.INSERT 表示插入时填充数据,FieldFill.UPDATE 表示更新时填充数据
其他的相关策略可以看 MyBatis-Plus的官网