Mybatis-Plus自动填充更新操作相关字段的实现
作者:honvin_ 发布时间:2023-06-04 22:37:12
标签:MyBatis-Plus,字段,填充
目录
场景介绍
自动填充处理器
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
0
投稿
猜你喜欢
- 一、 WillPopScope用法WillPopScope本质是一个widget用于拦截物理按键返回事件(Android的物理返回键和iOS
- 我们在j2ee当中,连接数据库的时候经常会用到properties配置文件,我们原来在eclipse或者myeclipse当中会在src文件
- ArrayList中存放引用数据类型ArrayList中存放引用类型时,存放的是一个引用,因此在放入ArrayList之后再进行改动会影响到
- 1.介绍有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec(
- reduce()简介Reduce 原意:减少,缩小根据指定的计算模型将Stream中的值计算得到一个最终结果解释:reduce 操
- Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制
- 集成使用1、添加 gradle 依赖implementation "com.ctrip.framework.apollo:apol
- 介绍: Mybatis-Plus(简称MP)
- 利用Android的ApiDemos的Rotate3dAnimation实现了个图片3D旋转的动画,围绕Y轴进行旋转,还可以实现Z轴的缩放。
- 本文实例讲述了Java基于Tcp的基础聊天功能。分享给大家供大家参考,具体如下:最基础的聊天,用户端和服务器端每次说一句,而且严格规定了先后
- 一.MyBatis简介1)MyBatis 是一款优秀的持久层框架2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结
- java有两种类型的classload,一种是user-defined的,一种是jvm内置的bootstrap class loader,所
- 引例问题:现在有一只羊(包含属性:名字Dolly、年龄2),需要克隆10只属性完全相同的羊。一般解法:定义Sheep类表示羊,包括构造器、g
- 二分查找又称折半查找,它是一种效率较高的查找方法。折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以
- 前言这几天学习谷粒商城又再次的回顾了一次SpringCache,之前在学习谷粒学院的时候其实已经学习了一次了!!!这里就对自己学过来的内容进
- 环境JDK 1.8Spring Boot 2.3.0.RELEASEMaven 3.6.1H2 数据库用户名密码登录首先,我们用 Sprin
- maven thin jar 步骤spring-boot-maven-plugin configuration &
- 接口:官方的含义是---->java接口是一系列方法的声明,是一些方法特征的集合疑问:那为什么不用抽象类呢?把他们共有的方法集合起来放
- 持久层的那些事什么是 JDBCJDBC(JavaDataBase Connectivity)就是 Java 数据库连接, 说的直白点就是 使
- java里有数字long来表示大的整数,如果两个数字的范围超过了long,要做加法算法怎么做呢?这个问题在面试中经常碰到,如果之前没有经历的