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

作者:honvin_ 时间:2022-01-14 20:43:01 

在阿里开发手册的建表规约中有说明,数据库表中应该都要有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;
}

我这边是在实体中抽取了一个父类出来,当然也可以直接在实体类的对应字段上添加注解。

来源:https://blog.csdn.net/hon_vin/article/details/103823788

标签:Mybatis-Plus,自动填充
0
投稿

猜你喜欢

  • javaWeb使用servlet搭建服务器入门

    2023-11-21 04:47:45
  • spring boot项目没有mainClass如何实现打包运行

    2021-10-24 11:29:20
  • Maven配置文件pom.xml详解

    2022-07-03 02:26:43
  • java代码实现MD5加密及验证过程详解

    2023-09-26 02:50:45
  • Java的封装类和装箱拆箱详解

    2023-09-20 22:41:22
  • Java实现配置加载机制

    2023-11-26 09:03:38
  • Java新手环境搭建 JDK8安装配置教程

    2023-11-25 17:23:10
  • 学习SpringBoot容器功能及注解原理

    2023-11-24 22:06:17
  • 一次由Lombok的@AllArgsConstructor注解引发的错误及解决

    2023-10-07 05:23:42
  • springboot实现异步任务

    2023-04-23 01:25:21
  • 一文梳理Java 8后的新功能

    2023-07-13 07:41:43
  • Java编程用两个栈实现队列代码分享

    2023-03-22 01:05:05
  • java中String的一些方法深入解析

    2023-11-25 21:48:56
  • java 字符串截取的三种方法(推荐)

    2021-05-24 06:49:52
  • java中struts2实现文件上传下载功能实例解析

    2022-03-31 06:47:38
  • JAVA提高第八篇 动态代理技术

    2023-07-19 07:13:12
  • Android开发之android_gps定位服务简单实现

    2023-07-31 20:02:25
  • 谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题

    2023-07-31 01:34:27
  • 为什么不要使用 async void的原因分析

    2023-11-24 21:10:27
  • Java实现图片倒影的源码实例内容

    2022-08-30 02:39:24
  • asp之家 软件编程 m.aspxhome.com