Mybatis-Plus自动填充更新操作相关字段的实现

 更新时间:2020年12月18日 16:48:56   作者:honvin_  
这篇文章主要介绍了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接口

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自动填充更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot3实现优雅停机的完整流程

    SpringBoot3实现优雅停机的完整流程

    在现代微服务架构中,优雅停机(Graceful Shutdown)是一项重要功能,可以确保服务在关闭时处理完所有当前请求,避免突然终止连接或丢失数据,Spring Boot 3 提供了对优雅停机的内置支持,本文给大家介绍了SpringBoot3怎样优雅停机,需要的朋友可以参考下
    2024-10-10
  • 基于自定义BufferedReader中的read和readLine方法

    基于自定义BufferedReader中的read和readLine方法

    下面小编就为大家分享一篇基于自定义BufferedReader中的read和readLine方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Springboot 整合 Dubbo/ZooKeeper 实现 SOA 案例解析

    Springboot 整合 Dubbo/ZooKeeper 实现 SOA 案例解析

    这篇文章主要介绍了Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例,需要的朋友可以参考下
    2017-11-11
  • Java泛型机制的程序演示详解

    Java泛型机制的程序演示详解

    这篇文章主要为大家详细介绍了Java泛型机制的程序演示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Java多线程中关于join方法的使用实例解析

    Java多线程中关于join方法的使用实例解析

    本文通过实例代码给大家实例介绍了Java多线程中关于join方法的使用,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • SpringBoot使用拦截器Interceptor实现统一角色权限校验

    SpringBoot使用拦截器Interceptor实现统一角色权限校验

    角色权限校验,是保证接口安全必备的能力:有权限才可以操作,所以,一般对于这种通用逻辑,推荐不与主业务逻辑耦合,那么怎么来解耦,那么本文小编就给大家详细讲解如何使用拦截器Interceptor实现统一角色权限校验,需要的朋友可以参考下
    2023-07-07
  • Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    在Maven项目中,若创建过同名module后删除,再次创建时可能导致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕迹,导致重建时将其视为已删除的module,解决方法是进入IDEA设置,找到Maven的Ignored Files设置
    2024-09-09
  • java实现根据ip地址获取地理位置的代码分享

    java实现根据ip地址获取地理位置的代码分享

    这篇文章主要介绍了java实现根据ip地址获取地理位置的代码分享,本文中使用的是QQ在线接口,也可以使用新浪、淘宝等提供的在线接口,需要的朋友可以参考下
    2014-08-08
  • Java使用POI解析带图片的excel文件(简洁好用!)

    Java使用POI解析带图片的excel文件(简洁好用!)

    这篇文章主要给大家介绍了关于Java如何使用POI解析带图片的excel文件的相关资料,最近项目需要读取excel中的信息,带图片,所以这里给大家总结下,需要的朋友可以参考下
    2023-08-08
  • Spring中的@ControllerAdvice三种用法详解

    Spring中的@ControllerAdvice三种用法详解

    这篇文章主要介绍了Spring中的@ControllerAdvice三种用法详解,加了@ControllerAdvice的类为那些声明了(@ExceptionHandler、@InitBinder或@ModelAttribute注解修饰的)方法的类而提供的<BR>专业化的@Component,以供多个Controller类所共享,需要的朋友可以参考下
    2024-01-01

最新评论