Mybatis-Plus自动填充更新操作相关字段的实现
在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、update_time字段;那么在开发中,对于这些共有字段的处理应该要进行统一,这样就可以简化我们的开发过程。那么本文就对Mybatis-Plus中的字段自动填充进行记录。
场景介绍
在项目的数据表设计中,每张表都有create_id、create_time、update_id、update_time这四个字段,那么在Java应用中,针对新增和修改操作要对这四个字段进行相应的更改:
- create_id、update_id要自动填充为当前登录的用户ID
- create_time、update_time要自动填充为当前时间
下面说说代码实现:
自动填充处理器
需要实现Mybatis-Plus中的MetaObjectHandler接口
importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
importhw.topevery.basis.runtime.UserRuntime;
importorg.apache.ibatis.reflection.MetaObject;
importorg.springframework.stereotype.Component;
importjava.time.LocalDateTime;
importjava.util.Objects;
/**
*更新相关字段处理器
*
*@authorwhw
*@date2020/1/316:41
*/
@Component
publicclassUpdateRelatedFieldsMetaHandlerimplementsMetaObjectHandler{
/**
*新增操作
*
*@parammetaObject
*/
@Override
publicvoidinsertFill(MetaObjectmetaObject){
this.strictInsertFill(metaObject,"createId",String.class,getCurrentUserId());
this.strictInsertFill(metaObject,"createTime",LocalDateTime.class,LocalDateTime.now());
this.strictInsertFill(metaObject,"updateId",String.class,getCurrentUserId());
this.strictInsertFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());
}
/**
*更新操作
*
*@parammetaObject
*/
@Override
publicvoidupdateFill(MetaObjectmetaObject){
this.strictUpdateFill(metaObject,"updateId",String.class,getCurrentUserId());
this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());
}
/**
*获取当前登录用户ID
*
*@return
*/
privateStringgetCurrentUserId(){
return"当前登录用户ID";
}
}
Mybatis-Plus配置类
需要将处理器注入进Spring容器才会生效
importcom.baomidou.mybatisplus.core.config.GlobalConfig;
importcom.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
importhw.topevery.kunming.wapi.handler.UpdateRelatedFieldsMetaHandler;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
/**
*Mybatis-Plus配置类
*
*@authorwhw
*@date2020/1/316:41
*/
@Configuration
publicclassMybatisPlusConfig{
@Bean
publicGlobalConfigglobalConfig(){
GlobalConfigglobalConfig=newGlobalConfig();
globalConfig.setMetaObjectHandler(newUpdateRelatedFieldsMetaHandler());
returnglobalConfig;
}
}
配置实体类中相关字段的自动填充策略
在@TableField注解中设置fill属性
字段填充策略FieldFill说明
| 值 | 描述 |
|---|---|
| DEFAULT | 默认不处理 |
| INSERT | 插入填充字段 |
| UPDATE | 更新填充字段 |
| INSERT_UPDATE | 插入和更新填充字段 |
importcom.baomidou.mybatisplus.annotation.FieldFill;
importcom.baomidou.mybatisplus.annotation.TableField;
importio.swagger.annotations.ApiModelProperty;
importlombok.Data;
importjava.io.Serializable;
importjava.time.LocalDateTime;
/**
*基础实体类
*
*@authorwhw
*@date2020/1/317:37
*/
@Data
publicclassBaseEntityimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
@ApiModelProperty(value="创建用户ID")
@TableField(value="c_create_id",fill=FieldFill.INSERT)
privateStringcreateId;
@ApiModelProperty(value="创建时间")
@TableField(value="c_create_time",fill=FieldFill.INSERT)
privateLocalDateTimecreateTime;
@ApiModelProperty(value="更新用户ID")
@TableField(value="c_update_id",fill=FieldFill.INSERT_UPDATE)
privateStringupdateId;
@ApiModelProperty(value="更新时间")
@TableField(value="c_update_time",fill=FieldFill.INSERT_UPDATE)
privateLocalDateTimeupdateTime;
}
我这边是在实体中抽取了一个父类出来,当然也可以直接在实体类的对应字段上添加注解。
到此这篇关于Mybatis-Plus自动填充更新操作相关字段的实现的文章就介绍到这了,更多相关Mybatis-Plus自动填充更新内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!