mybatis-plus属性填充
应用场景
实际开发过程中, 数据库表设计经常需要create和update相关的字段, 如
createUserId
,createTime
,updateUserId
,updateTime
等, 对于create相关的字段只需要创建的时候赋值即可, 而update相关的字段每次更新都需要重新赋值, 如果直接写在代码里会增加很多无用的代码, 这时候可以通过mybatis-plus的填充属性
功能实现
mybatis-plus填充属性官方文档
https://baomidou.com/pages/4c6bcf/
具体使用
-
实现元数据处理接口
inserFill()
方法用于插入时对公共字段的填充,updateFill()
方法用于更新时对公共字段的填充- 项目中userId和userName都是通过接口参数传递, 我将它们设置到ThreadLocal变量中方便提取
@Component public class FieldFillHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(System.currentTimeMillis()), metaObject); this.setFieldValByName("updateTime", new Date(System.currentTimeMillis()), metaObject); // 项目中使用的userId和userName Map<String, String> contextMap = RequestHeaderHolder.getContextMap(); if (!CollectionUtils.isEmpty(contextMap)) { this.setFieldValByName("createUserId", contextMap.get(RequestHeaderHolder.USER_IDENTITY), metaObject); this.setFieldValByName("createUserName", contextMap.get(RequestHeaderHolder.USER_NAME), metaObject); this.setFieldValByName("updateUserId", contextMap.get(RequestHeaderHolder.USER_IDENTITY), metaObject); this.setFieldValByName("updateUserName", contextMap.get(RequestHeaderHolder.USER_NAME), metaObject); } } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(System.currentTimeMillis()), metaObject); // 获取userId和userName Map<String, String> contextMap = RequestHeaderHolder.getContextMap(); if (!CollectionUtils.isEmpty(contextMap)) { this.setFieldValByName("updateUserId", contextMap.get(RequestHeaderHolder.USER_IDENTITY), metaObject); this.setFieldValByName("updateUserName", contextMap.get(RequestHeaderHolder.USER_NAME), metaObject); } }
-
在需要填充的字段上添加注解
@ApiModelProperty(value = "创建人id") @TableField(fill = FieldFill.INSERT) private String createUserId; @ApiModelProperty(value = "创建人") @TableField(fill = FieldFill.INSERT) private String createUserName; @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) private Date createTime; @ApiModelProperty(value = "修改人id") @TableField(fill = FieldFill.INSERT_UPDATE) private String updateUserId; @ApiModelProperty(value = "修改人") @TableField(fill = FieldFill.INSERT_UPDATE) private String updateUserName; @ApiModelProperty(value = "修改时间") @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
其中FieldFill枚举包含如下:
public enum FieldFill { /** * 默认不处理 */ DEFAULT, /** * 插入填充字段 */ INSERT, /** * 更新填充字段 */ UPDATE, /** * 插入和更新填充字段 */ INSERT_UPDATE }