在阿里开发手册的建表规约中有说明,数据库表中应该都要有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接口
- 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";
- }
- }
Mybatis-Plus配置类
需要将处理器注入进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 字段自动填充内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!