Mybatis-Plus自动填充更新操作相关字段的实现
作者:honvin_ 时间:2023-06-04 22:37:12
目录
场景介绍
自动填充处理器
Mybatis-Plus配置类
配置实体类中相关字段的自动填充策略
在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、update_time字段;那么在开发中,对于这些共有字段的处理应该要进行统一,这样就可以简化我们的开发过程。那么本文就对Mybatis-Plus中的字段自动填充进行记录。
场景介绍
在项目的数据表设计中,每张表都有create_id、create_time、update_id、update_time这四个字段,那么在Java应用中,针对新增和修改操作要对这四个字段进行相应的更改:
create_id
、update_id
要自动填充为当前登录的用户IDcreate_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,字段,填充
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android的ImageButton当显示Drawable图片时就不显示文字
2023-11-25 17:40:00
C++实现LeetCode(9.验证回文数字)
2023-06-21 00:20:38
Android Studio 新建项目通过git上传到码云图文教程详解
2021-08-09 12:12:05
![](https://img.aspxhome.com/file/2023/5/92595_0s.png)
C#使用iTextSharp将PDF转成文本的方法
2022-05-03 16:59:48
Mybatis分页的4种方式实例
2021-07-01 10:43:05
Java使用通配符实现增强泛型详解
2021-07-06 17:28:01
![](https://img.aspxhome.com/file/2023/2/60282_0s.png)
C#中面向对象编程机制之多态学习笔记
2023-12-06 20:16:33
一篇文章带你从java字节码层理解i++和++i
2023-05-29 13:57:58
![](https://img.aspxhome.com/file/2023/9/63849_0s.png)
Java 栈与队列超详细分析讲解
2023-08-15 01:09:07
![](https://img.aspxhome.com/file/2023/1/58051_0s.png)
Android SQLite数据库加密的操作方法
2021-10-14 11:22:05
![](https://img.aspxhome.com/file/2023/2/138782_0s.jpg)
Android中实现Webview顶部带进度条的方法
2022-04-22 15:45:43
![](https://img.aspxhome.com/file/2023/2/116142_0s.png)
C#获取进程或线程相关信息的方法
2021-06-27 16:37:23
Spring Data JPA中 in 条件参数的传递方式
2023-11-08 06:45:47
如何使用Spring Boot ApplicationRunner解析命令行中的参数
2022-12-11 02:45:32
Kotlin实现在类里面创建main函数
2022-08-26 20:11:13
![](https://img.aspxhome.com/file/2023/7/94997_0s.jpg)
java动态导出excel压缩成zip下载的方法
2022-07-13 07:29:27
Spring Boot开发RESTful接口与http协议状态表述
2023-05-27 03:26:48
![](https://img.aspxhome.com/file/2023/4/84314_0s.png)
详解C# WebApi 接口测试工具:WebApiTestClient
2022-05-15 07:58:44
![](https://img.aspxhome.com/file/2023/7/132327_0s.png)
java 同步、异步、阻塞和非阻塞分析
2022-08-09 03:02:42
![](https://img.aspxhome.com/file/2023/1/70321_0s.png)
Java中的BaseTypeHandler自定义类型转换器的使用
2022-03-09 00:34:16