当前位置: 首页 > news >正文

mybatisplus公共字段自动填充

你比如说像插入时间、更新时间等这种类型的字段,你在插入、更新时候要额外写一个setValue,总写总写其实有点麻烦的,这里mybatisplus给我们提供了一个公共字段统一自动填充的方式。

只需要在对应字段加上注释@TableField(fill = FieldFill.INSERT_UPDATE),FieldFill.INSERT_UPDATE代表插入和更新时候都自动填充。

package com.xxx.xxxxx.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="Employee对象", description="员工信息")
public class Employee implements Serializable {private static final long serialVersionUID=1L;@ApiModelProperty(value = "主键")@TableId(value = "id", type = IdType.ID_WORKER)private Long id;@ApiModelProperty(value = "姓名")private String name;@ApiModelProperty(value = "用户名")private String username;@ApiModelProperty(value = "密码")private String password;@ApiModelProperty(value = "手机号")private String phone;@ApiModelProperty(value = "性别")private String sex;@ApiModelProperty(value = "身份证号")private String idNumber;@ApiModelProperty(value = "状态 0:禁用,1:正常")private Integer status;@JsonFormat(pattern = "yyyy-MM-dd")@TableField(fill = FieldFill.INSERT)@ApiModelProperty(value = "创建时间")private Date createTime;@JsonFormat(pattern = "yyyy-MM-dd")@TableField(fill = FieldFill.INSERT_UPDATE)@ApiModelProperty(value = "更新时间")private Date updateTime;@TableField(fill = FieldFill.INSERT)@ApiModelProperty(value = "创建人")private Long createUser;@TableField(fill = FieldFill.INSERT_UPDATE)@ApiModelProperty(value = "修改人")private Long updateUser;
}

然后再写一个自动填充逻辑,注意这个插入、修改的用户名的逻辑,你没办法直接获取,所以在一开始登录的时候就要有一个对threadLocal变量的处理,把用户名存进去,因为每一个请求后台都是启动一个线程跟着去执行的,如下的UserContext。

public class UserContext {// 全局使用public static ThreadLocal<Long> USER_ID = new ThreadLocal<>();public static Long getUserId() {return USER_ID.get();}public static void setUserId(Long userId) {USER_ID.set(userId);}
}
package com.xxx.xxxxxx.config;import com.xxx.xxxxx.common.UserContext;
import com.xxx.xxxxx.entity.Employee;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.Date;@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("start insert fill ....");this.setFieldValByName("createTime",new Date(),metaObject);this.setFieldValByName("updateTime",new Date(),metaObject);this.setFieldValByName("createUser",UserContext.getUserId(),metaObject);this.setFieldValByName("updateUser",UserContext.getUserId(),metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill ....");this.setFieldValByName("updateTime",new Date(),metaObject);this.setFieldValByName("updateUser", UserContext.getUserId(),metaObject );}
}

假设有不同的表都需要这个自动填充,那需要再加一层判断表名:

String tableName = metaObject.getMetaObject().getTableName();
if ("user".equals(tableName)) {this.setFieldValByName("createTime",new Date(),metaObject);
}
http://www.xdnf.cn/news/595891.html

相关文章:

  • 1.3 任务Task的说明(Xqt)
  • [Linux文件系统] “我的文件在哪?”FHS标准深度解析与核心目录实用指南
  • MVC和MVVM架构的区别
  • sqli-labs——二次注入
  • 常见的慢SQL优化方式
  • strlen和sizeof,const char *、char * const 和char []区别
  • 第二十九天打卡
  • 网络割接的详细流程和关键点
  • 关于常见日志的几种级别和格式
  • 加工生产调度(Johnson算法)
  • vue vite textarea标签按下Shift+Enter 换行输入,只按Enter则提交的实现思路
  • 准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序
  • 手写ES6 Promise() 相关函数
  • 怎么把https://github.com项目拉到自己的github
  • 在Ubuntu18.04下搭建SadTalker让图片开口说话
  • 第五章:异步幻境 · 时间与数据的秘密
  • STM32之温湿度传感器(DHT11)
  • 纯惯导(INS)的误差来源及其对静态漂移曲线的影响
  • SS928V100(Hi3403V100)----NNN推理引擎,AMCT-ONNX模型压缩量化踩坑记录(LINUX版)
  • 数据指标体系:企业数字化转型的“数字基因“革命
  • Even Split_CodeForces - 1666E分析与解答
  • 【三轴加速度计】QMA6100P数据手册解析
  • 基于RFSOC49DR-16收16发 PCIE4.0 X8 射频采集卡
  • 航电系统之云台检测技术篇
  • 5月22总结
  • 浅聊一下搭建企业私有知识库的可行方案
  • Springboot3
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • Linux(Ubuntu)新建文件权限继承问题
  • MQTT-主题(Topic)