代码依赖于mybatis-plus环境
!!!!!!!
相信很多boy被每次插入和更新的时候需要更新时间或者其他数据所折磨,这里我们就引入今天的主人公来解决这个繁琐操作的问题。
1.创建一个实现接口MetaObjectHandler的类
重要参数解释:
this.strictInsertFill(metaObject,“created”, Date.class,new Date());
created -----》对应我们映射实体的字段
Data.class -----》对应我们实体的参数类型(pojo或者dao)
最后一位 -----》 对应我们想要填充的参数
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.coin.xzh.mapper.SysUserMapper;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* admin-service
* 数据自动填充功能
*/
@Component
public class DataFillHandler implements MetaObjectHandler {
@Autowired
private SysUserMapper sysUserMapper;
/**
* insert时的填充
* 填充对象:
* 1、插入的执行人(id)
* 2、插入时间
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
long userId=getCurrentId();
this.strictInsertFill(metaObject,"createBy",Long.class,userId);
this.strictInsertFill(metaObject,"created", Date.class,new Date());
this.strictInsertFill(metaObject,"lastUpdateTime",Date.class,new Date());
}
/**
* update时候的填充
* 填充对象:
* 1、更新的执行人(id)
* 2、更新的时间
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
long userId=getCurrentId();
this.strictUpdateFill(metaObject,"modifyBy",Long.class,userId);
this.strictUpdateFill(metaObject,"lastUpdateTime",Date.class,new Date());
}
/**
* 获取当前安全上下文的用户的id
* @return
*/
public long getCurrentId(){
String username= (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return sysUserMapper.selectUserIdByName(username);
}
}
2.实体上使用fill来表明在什么时候填充(insert update insert_update)
重要解释
@TableField(value = “create_by”,fill = FieldFill.INSERT)
表示在插入的时候就填充数据
/**
* 创建人
*/
@TableField(value = "create_by",fill = FieldFill.INSERT)
@ApiModelProperty(value="创建人")
private Long createBy;
/**
* 修改人
*/
@TableField(value = "modify_by",fill = FieldFill.UPDATE)
@ApiModelProperty(value="修改人")
private Long modifyBy;
/**
* 创建时间
*/
@TableField(value = "created",fill = FieldFill.INSERT)
@ApiModelProperty(value="创建时间")
private Date created;
/**
* 修改时间
*/
@TableField(value = "last_update_time",fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value="修改时间")
private Date lastUpdateTime;
```