说明:
MetaObjectHandler接口
是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入
或者更新
数据的时候,为一些字段指定默认值
。实现这个需求的方法不止一种,在sql层面也可以做到,在建表的时候也可以指定默认值。
代码如下:
@Slf4j
@Component
public class MetaBasicsHandler implements MetaObjectHandler {
public static final String UPDATE_TIME = "updateTime";
public static final String CREATE_TIME = "createTime";
@Override
public void insertFill(MetaObject metaObject) {
setBasicsInfo(Boolean.TRUE,metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
setBasicsInfo(Boolean.FALSE,metaObject);
}
private void setBasicsInfo(boolean saveOrUpdate,MetaObject metaObject){
MagpieUser user = SecurityUtils.getUser();
if (user == null){return;}
if (saveOrUpdate){
/*创建人id*/
this.setFieldValByName("createId",user.getId(),metaObject);
/*创建人名称*/
this.setFieldValByName("createName",user.getUsername(),metaObject);
/*创建时间*/
this.setFieldValByName(CREATE_TIME,formatDate(metaObject.getSetterType(CREATE_TIME)),metaObject);
/*创建人部门id*/
this.setFieldValByName("createDeptId",user.getDeptId(),metaObject);
/*创建人部门名称*/
this.setFieldValByName("createDeptName",user.getCenterName(),metaObject);
return;
}
/*更新人id*/
this.setFieldValByName("updateId",user.getId(),metaObject);
/*更新人名称*/
this.setFieldValByName("updateName",user.getUsername(),metaObject);
/*更新时间*/
this.setFieldValByName(UPDATE_TIME,formatDate(metaObject.getSetterType(UPDATE_TIME)),metaObject);
/*更新人部门id*/
this.setFieldValByName("updateDeptId",user.getDeptId(),metaObject);
/*更新人部门名称*/
this.setFieldValByName("updateDeptName",user.getCenterName(),metaObject);
}
/**
* 处理特殊日期
* @param setterType 参数类型
* @return 日期类型
*/
private Object formatDate(Class<?> setterType){
if (Date.class.equals(setterType)){
return new Date();
} else if (LocalDateTime.class.equals(setterType)) {
return LocalDateTime.now();
} else if (Long.class.equals(setterType)) {
return System.currentTimeMillis();
}
return null;
}
}