@TableField(fill = FieldFill.INSERT_UPDATE)介绍和使用

@TableField(fill = FieldFill.INSERT_UPDATE)是什么

@TableField(fill = FieldFill.INSERT)、@TableField(fill = FieldFill.INSERT_UPDATE)这两个注解经常在项目中使用到,他MyBatis-Plus 库中的注解,它用于指定字段在执行数据库表的插入和更新操作时的填充策略

@TableField(fill = FieldFill.INSERT_UPDATE)详细介绍

  1. 功能:
    @TableField(fill = FieldFill.INSERT_UPDATE) 注解用于指示在插入和更新操作期间自动填充字段的值。通常,该注解应用于实体类字段,这些字段映射到数据库表中的列。
  2. 填充策略:
    注解的 fill 属性指定了字段的填充策略。有几个选项可用:
  • FieldFill.DEFAULT:这是默认的填充策略,表示字段不应自动填充。
  • FieldFill.INSERT:该策略指示字段在插入操作时自动填充。
  • FieldFill.UPDATE:该策略指示字段在更新操作时自动填充。
  • FieldFill.INSERT_UPDATE:该策略指示字段在插入和更新操作时都自动填充。
  1. 使用方法:
    要使用 @TableField(fill = FieldFill.INSERT_UPDATE) 注解,按照以下步骤进行操作:
  • 在实体类中,找到要应用填充策略的字段。
  • 在字段上添加 @TableField(fill = FieldFill.INSERT_UPDATE) 注解。

实际使用案例

有一个student表对应Student实体类,包含一下四个字段:creatorId、createTime、updaterId、updateTime

需要实现如下功能:

  • creatorId:创建人 - 创建时自动填充
  • createTime:创建时间 - 创建时自动填充
  • updaterId:更新人 - 创建和更新时自动填充
  • updaterId:更新时间 - 创建和更新时自动填充

第一步:字段上添加注解

对应的字段分别加上@TableField(fill = FieldFill.INSERT)和@TableField(fill = FieldFill.INSERT_UPDATE)注解

具体如下:

Student实体类

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.util.Date;@Data
@EqualsAndHashCode(callSuper = false)
@TableName("student")
@ApiModel(value="Student对象", description="学生表")
public class Student implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "自增ID")@TableId(value = "id", type = IdType.AUTO)private Integer id;@ApiModelProperty(value = "姓名")private String name;@ApiModelProperty(value = "性别")private Integer sex;@ApiModelProperty(value = "生日")@JsonFormat(pattern = "yyyy-MM-dd")private Date birthday;@ApiModelProperty(value = "身份证号")private String idCard;@ApiModelProperty(value = "手机号")private String phone;@ApiModelProperty(value = "创建人")@TableField(fill = FieldFill.INSERT)private Integer creatorId;@ApiModelProperty(value = "创建时间")@TableField(fill = FieldFill.INSERT)private Date createTime;@ApiModelProperty(value = "更新人")@TableField(fill = FieldFill.INSERT_UPDATE)private Integer updaterId;@ApiModelProperty(value = "更新时间")@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;}

第二步:添加元数据对象处理器

添加元数据对象处理器,实现MetaObjectHandler类

注意:这个类加上要加@Component注解,这样spring容器才能管理到

import cn.dev33.satoken.stp.StpUtil;
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.util.Date;
import java.util.Optional;@Slf4j
@Component
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);// 创建人id使用当前登录人id填充,没有的话默认设置1this.setFieldValByName("creatorId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);// 更新人id使用当前登录人id填充,没有的话默认设置1this.setFieldValByName("updaterId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill");// 更新时间使用当前时间填充this.setFieldValByName("updateTime", new Date(), metaObject);// 更新人id使用当前登录人id填充,没有的话默认设置1this.setFieldValByName("updaterId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);}}

实现MetaObjectHandler中的insertFill、updateFill方法

创建人和更新人这里是基于SaToken中获取的,我这里项目使用SaToken来做认证和鉴权,大家可按自己实际情况进行赋值

这样student插入和更新时这四个字段就会赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商家转账到零钱转账场景怎么选择

商家转账到零钱是什么? 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱,支持批量对外转账,操作便捷。如果你的应用场景是单付款,体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些? 商…

【强化学习2--基于策略梯度的方法】

文章目录 深度强化学习---基于策略梯度的方法为什么要用策略梯度方法?策略梯度方法的优势策略梯度定理REINFORCEActor-CriticA2C:Advantage Actor-CriticPPO总结 深度强化学习—基于策略梯度的方法 本篇主要介绍单智能体强化学习——基于策略梯度的方法。 为什么要…

如何利用百度SEO优化技巧将排到首页

拥有一个成功的网站对于企业和个人来说是至关重要的,在当今数字化的时代。在互联网上获得高流量和优质的访问者可能并不是一件容易的事情,然而。一个成功的SEO战略可以帮助你实现这一目标。需要一些特定的技巧和策略、但要在百度搜索引擎中获得较高排名。…

手写简易操作系统(六)--内存分页

前情提要 上一节我们讲到了获取物理内存,这节我们将开启内存分页 一、内存分页的作用 内存分页是一种操作系统和硬件协同工作的机制,用于将物理内存分割成固定大小的页面(通常为4KB)并将虚拟内存空间映射到这些页面上。内存分页…

填涂颜色(洛谷)

题目 原题 由数字 0 0 0 组成的方阵中,有一任意形状的由数字 1 1 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2 2 2。例如: 6 6 6\times 6 66 的方阵( n 6 n6 n6),涂色前和涂色后的方阵如下&#xff1…

【更新】上市公司“宽带中国”战略数据集(2000-2022年)

参照李万利(2022)、薛成(2020)等人的做法,根据企业所在城市入选“宽带中国”试点战略的批次构建DID。如果样本期间内企业所在城市被评选为“宽带中国” 试点城市,则该地区企业样本在入选当年及以后年份取1&…

video标签的src和srcObject属性的区别

在HTML的<video>标签中&#xff0c;src和srcObject是两个不同的属性。 src属性&#xff1a;用于指定视频资源的URL。可以通过设置该属性来指定一个视频文件的路径或者网络地址&#xff0c;例如 <video src"video.mp4"></video> 通过设置src属性&a…

打卡学习kubernetes——了解k8s基本概念

目录 1 Container 2 Pod 3 Node 4 Namespace 5 Service 6 Label 7 Annotations 8 Volume 1 Container Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用namespace隔离不同的软件运行环境&#xff0c;并通过镜像自包含软件的运行环境&#xff0c;从而…

计算机二级真题讲解每日一题:《高校分类》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ 修改编程模板&#xff0c;用…

Focal and Global Knowledge Distillation forDetectors

摘要 文章指出&#xff0c;在目标检测中&#xff0c;教师和学生在不同领域的特征差异很大&#xff0c;尤其是在前景和背景中。如果我们 平等地蒸馏它们&#xff0c;特征图之间的不均匀差异将对蒸馏产生负面影响。因此&#xff0c;我们提出了局部和全局蒸馏。局部蒸馏分离前景和…

【Spring Boot系列】快速上手 Spring Boot

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言(数组)单元练习二

单项选择题 1. A. float f[3,4]&#xff1b; B. int a[ ][4]&#xff1b; C. char c(3)&#xff1b; D. double d[32][4]&#xff1b; 2. 一维数组初始化时,若对部分数组元素赋初值,则下面正确的说法是______。 A. 可以只对数组的前几个元素赋初值 B. 可以只对数…

macOS - 获取硬件设备信息

文章目录 1、CPU获取方式 一&#xff1a; system_profiler获取方式二&#xff1a;sysctl&#xff0c; machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一&#xff1a; system_profiler % syst…

深信服技术认证“SCCA-C”划重点:深信服应用交付AD

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08;S…

中国工程精英智创数字工厂——2023纵览基础设施大会暨光辉大奖赛观察 (下)

中国工程精英智创数字工厂 ——2023纵览基础设施大会暨光辉大奖赛观察 &#xff08;下&#xff09; 吴付标 中国制造的尽头是智能化、智慧化&#xff0c;这一趋势正在加速前进。2022年&#xff0c;中国以50座达沃斯论坛盖章认证的“灯塔工厂”数量冠绝全球&#xff0c;而“数…

活动预告:如何培养高质量应用型医学人才?

在大数据时代与“新医科”建设的背景下&#xff0c;掌握先进的医学数据处理技术成为了医学研究与应用的重要技能。 为了更好地培养社会所需要的高质量应用型医学人才&#xff0c;许多高校已经在广泛地开展面向医学生的医学数据分析教学工作。 在“课-训-赛”育人才系列活动的…

详解Python中%r和%s的区别及用法

首先看下面的定义&#xff1a; %r用rper()方法处理对象 %s用str()方法处理对象 函数str() 用于将值转化为适于人阅读的形式&#xff0c;而repr() 转化为供解释器读取的形式&#xff08;如果没有等价的语法&#xff0c;则会发生SyntaxError 异常&#xff09; 某对象没有适于人…

Spring Data访问 MongoDB(十五)----MongoDB特有的数据操作方法

【Spring连载】使用Spring Data访问 MongoDB&#xff08;十五&#xff09;----MongoDB特有的数据操作方法 一、更新方法二、删除方法 除了 查询方法之外&#xff0c;还可以使用专门的方法更新数据。 一、更新方法 你还可以使用上表中的关键字创建查询&#xff0c;以标识匹配的…

rust 阿里云oss操作

在rust中如何操作阿里云oss文件&#xff0c;阿里云官方并没有提供这样的sdk&#xff0c;我们可以使用社区的aliyun-oss-rust-sdk库crate来实现。 功能列表 文件下载签名下载签名上传获取上传对象的policy上传本地文件上传内存文件文件删除 添加依赖 [dependencies] # 异步 a…

面试常问:为什么 Vite 速度比 Webpack 快?

前言 最近作者在学习 webpack 相关的知识&#xff0c;之前一直对这个问题不是特别了解&#xff0c;甚至讲不出个123....&#xff0c;这个问题在面试中也是常见的&#xff0c;作者在学习的过程当中总结了以下几点&#xff0c;在这里分享给大家看一下&#xff0c;当然最重要的是…