在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、update_time字段;那么在开发中,对于这些共有字段的处理应该要进行统一,这样就可以简化我们的开发过程。那么本文就对Mybatis-Plus中的字段自动填充进行记录。
在项目的数据表设计中,每张表都有create_id、create_time、update_id、update_time这四个字段,那么在Java应用中,针对新增和修改操作要对这四个字段进行相应的更改:
下面说说代码实现:
需要实现Mybatis-Plus中的MetaObjectHandler接口
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import hw.topevery.basis.runtime.UserRuntime; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.Objects; /** * 更新相关字段处理器 * * @author whw * @date 2020/1/3 16:41 */ @Component public class UpdateRelatedFieldsMetaHandler implements MetaObjectHandler { /** * 新增操作 * * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { 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()); } /** * 更新操作 * * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateId", String.class, getCurrentUserId()); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } /** * 获取当前登录用户ID * * @return */ private String getCurrentUserId() { return "当前登录用户ID"; } }
需要将处理器注入进Spring容器才会生效
import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import hw.topevery.kunming.wapi.handler.UpdateRelatedFieldsMetaHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Mybatis-Plus配置类 * * @author whw * @date 2020/1/3 16:41 */ @Configuration public class MybatisPlusConfig { @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(new UpdateRelatedFieldsMetaHandler()); return globalConfig; } }
在@TableField注解中设置fill属性
字段填充策略FieldFill说明
值 | 描述 |
---|---|
DEFAULT | 默认不处理 |
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * 基础实体类 * * @author whw * @date 2020/1/3 17:37 */ @Data public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "创建用户ID") @TableField(value = "c_create_id", fill = FieldFill.INSERT) private String createId; @ApiModelProperty(value = "创建时间") @TableField(value = "c_create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "更新用户ID") @TableField(value = "c_update_id", fill = FieldFill.INSERT_UPDATE) private String updateId; @ApiModelProperty(value = "更新时间") @TableField(value = "c_update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
我这边是在实体中抽取了一个父类出来,当然也可以直接在实体类的对应字段上添加注解。
到此这篇关于Mybatis-Plus自动填充更新操作相关字段的实现的文章就介绍到这了,更多相关Mybatis-Plus自动填充更新内容请搜索菜鸟教程(cainiaojc.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程(cainiaojc.com)!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#cainiaojc.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。