需求
想实现在insert和update时,默认插入创建人,创建时间,更新人,更新时间字段的值。
分析
使用mybatisplus中MetaObjectHandler 元对象字段填充控制器 来处理,所以通过在实体类设置注解@TableField的fill属性,再自定义配置处理即可。
解决
1.创建配置类:
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.neuxa.springbreeze.core.session.UserInfo;
import com.neuxa.springbreeze.core.session.UserSessionHolder;
import com.neuxa.springbreeze.core.util.SbzDateUtils;
import com.neuxa.springbreeze.core.util.SbzStringUtils;
/**
* mybatis-plus insert update 默认字段处理类</br>
*
* @author hky
* @since V1.0.0<br>
* 2022年8月5日 下午2:06:07</br>
*/
@Component
public class MetaObjectHandlerConfig implements MetaObjectHandler {
/**
* 通用insert处理
*/
@Override
public void insertFill(MetaObject metaObject) {
Date now = SbzDateUtils.now();
setFieldValByName("createTime", now, metaObject);
setFieldValByName("updateTime", now, metaObject);
UserInfo userInfo = UserSessionHolder.getUserInfo();
if (userInfo != null && SbzStringUtils.isNotBlank(userInfo.getUserName())) {
setFieldValByName("createUser", userInfo.getUserName(), metaObject);
}
}
/**
* 通用update处理
*/
@Override
public void updateFill(MetaObject metaObject) {
Date now = SbzDateUtils.now();
setFieldValByName("updateTime", now, metaObject);
UserInfo userInfo = UserSessionHolder.getUserInfo();
if (userInfo != null && SbzStringUtils.isNotBlank(userInfo.getUserName())) {
setFieldValByName("updateUser", userInfo.getUserName(), metaObject);
}
}
}
2.设置po基类注解:
/**
* PO基类.</br>
*
* @author hky
* @since V1.0.0<br>
* 2022年7月20日 下午4:38:04</br>
*/
@data
public class BasePO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
* 创建人
*/
@TableField(value = "create_user", fill = FieldFill.INSERT)
private String createUser;
/**
* 修改时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 修改人
*/
@TableField(value = "update_user", fill = FieldFill.UPDATE)
private String updateUser;