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

字段填充策略 FieldFill

在这里插入图片描述
实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

    @ApiModelProperty("创建时间")@TableField(value = "create_time", fill = FieldFill.INSERT)@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)private Date createTime;@ApiModelProperty("修改人")@TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE)private Long updateUser;@ApiModelProperty("修改用户名称")@TableField(value = "update_user_name", fill = FieldFill.INSERT_UPDATE)private String updateUserName;@ApiModelProperty("修改时间")@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)private Date updateTime;@ApiModelProperty("是否已删除")@TableField("is_deleted")@TableLogicprivate Integer isDeleted;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?
在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:

package com.spang.monitor.common.handler;import com.spang.core.auth.util.AuthUtil;
import com.spang.core.mp.handler.CustomMetaObjectHandler;
import com.spang.core.tool.util.Func;
import org.apache.ibatis.reflection.MetaObject;import java.util.Date;
import java.util.Objects;public class CustomMetaObjectChemicalHandler extends CustomMetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {if (Objects.nonNull(AuthUtil.getUser())) {this.strictInsertFill(metaObject, "tenantId", String.class, AuthUtil.getTenantId());this.strictInsertFill(metaObject, "createUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "createUserName", String.class, AuthUtil.getUser().getRealName());this.strictInsertFill(metaObject, "createDept", Long.class, Func.firstLong(AuthUtil.getUser().getDeptId()));this.strictInsertFill(metaObject, "updateUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "updateUserName", String.class, AuthUtil.getUser().getRealName());}this.strictInsertFill(metaObject, "createTime", Date.class, new Date());this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());}@Overridepublic void updateFill(MetaObject metaObject) {if (Objects.nonNull(AuthUtil.getUser())) {this.setFieldValByName("updateUser", AuthUtil.getUser().getUserId(), metaObject);this.setFieldValByName("updateUserName", AuthUtil.getUser().getRealName(), metaObject);}this.setFieldValByName("updateTime", new Date(), metaObject);}
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package com.spang.core.mp.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.spang.core.auth.util.AuthUtil;
import com.spang.core.tool.util.Func;
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;public class CustomMetaObjectHandler implements MetaObjectHandler {public CustomMetaObjectHandler() {}public void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", Date.class, new Date());if (AuthUtil.getUser() != null) {this.strictInsertFill(metaObject, "createUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "createDept", Long.class, Func.toLong(AuthUtil.getUser().getDeptId()));}}public void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());if (AuthUtil.getUser() != null) {this.strictInsertFill(metaObject, "updateUser", Long.class, AuthUtil.getUser().getUserId());}}
}
http://www.lryc.cn/news/107651.html

相关文章:

  • Docker run 启动容器报错
  • Golang之路---03 面向对象——类型断言
  • Atcoder 做题记录
  • C++之观察者模式(发布-订阅)
  • 无头单链表,有完整测试程序
  • 2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法
  • MySQL做分布式锁
  • Python学习笔记:变量类型、字符串基本操作
  • JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型
  • 【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题
  • 通过了PMP考试,还有什么证书值得考?
  • 页面技术基础-html
  • /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found
  • 解决SVN或GIT忽略提交文件的问题
  • Django框架之路由用法
  • 回文链表 LeetCode热题100
  • 如何在群晖NAS中使用cpolar内网穿透
  • 无头单向不循环链表和带头双向循环链表的创建
  • 超简单的fastapi链接websocket用例
  • MySQL详解
  • Vue [Day2]
  • 【前端|Javascript第1篇】一文搞懂Javascript的基本语法
  • 【Linux命令200例】cp用于复制文件和目录(常用)
  • C高级_第二讲_shell指令和shell脚本_递归练习
  • 静态路由综合实验
  • Spring核心IOC控制反转思想-----Spring框架
  • 中小企业如何做好MES管理系统实施建设
  • java环境搭建 Ubuntu Linux
  • 微信小程序使用mp-html遇到的问题并解决
  • 【VTK】基于读取出来的 STL 模型,当用户点击鼠标左键时,程序将获取点击位置的点,显示其坐标,并设置它为模型的旋转原点