使用mybatisplus时,我们每一个实体类中都有一些公共字段,而且这个公共字段都是非空的,在执行更新或者新增的时候,每次都设置公共字段的值,浪费资源和时间,所以这里可以设置一下公共字段的填充(就是公共字段都设置相同的值,这里只需要设置一次就可以了,不需要重复设置)。
设置步骤:
第一步:在实体类的公共属性上使用@TableField注解,注解里面指定是插入时填充还是更新时填充(每一个实体类上的想要实现公共字段填充,都需要使用这个注解)
@TableField(fill = FieldFill.INSERT) //这个file后面填充的策略 ,插入时填充
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新时填充
private Date updateTime;
@TableField(fill = FieldFill.INSERT) //插入时填充
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新时填充
private Long updateUser;
第二步:自定义元数据对象处理器(编写一个类实现MetaObjectHander),并实现里面的insertFill()方法和updtaFill()方法。在这个方法,通过metaObject,setValue来设置我们公共填充的字段,以及填充的值
/**
* 自定义元数据对象处理器
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入的时候,执行的
@Override
public void insertFill(MetaObject metaObject) {
//获取登录用户的id
Long currentId = BaseContext.getCurrentId();
metaObject.setValue("createTime",new Date());
metaObject.setValue("updateTime",new Date());
metaObject.setValue("createUser",currentId);
metaObject.setValue("updateUser",currentId);
}
//更新的时候执行的
@Override
public void updateFill(MetaObject metaObject) {
Long currentId = BaseContext.getCurrentId();
metaObject.setValue("updateTime",new Date());
metaObject.setValue("updateUser",currentId);
}
}
上面的setValue里面的第一个参数就是我们实体类的属性,第二个参数就是我们设置的值,经过上述两步,就可以实现公共字段的填充。