5. 属性自动填充

《阿里巴巴Java开发手册》,在第 5 章 MySQL 数据库可以看到这样一条规范:
在这里插入图片描述

对于一张数据表,它必须具备三个字段:

  • id : 唯一ID
  • gmt_create : 保存的是当前数据创建的时间
  • gmt_modified : 保存的是更新时间

改造一下数据表:

alter table tbl_employee add column gmt_create datetime not null;
alter table tbl_employee add column gmt_modified datetime not null;

然后改造一下实体类:

@Data
@TableName("tbl_employee")
public class Employee {@TableId(type = IdType.AUTO) // 设置主键策略private Long id;private String lastName;private String email;private Integer age;private LocalDateTime gmtCreate;private LocalDateTime gmtModified;
}

此时在插入数据和更新数据的时候就需要手动去维护这两个属性:

@Test
void contextLoads() {Employee employee = new Employee();employee.setLastName("lisa");employee.setEmail("lisa@qq.com");employee.setAge(20);// 设置创建时间employee.setGmtCreate(LocalDateTime.now());employee.setGmtModified(LocalDateTime.now());employeeService.save(employee);
}@Test
void contextLoads() {Employee employee = new Employee();employee.setId(1385934720849584130L);employee.setAge(50);// 设置创建时间employee.setGmtModified(LocalDateTime.now());employeeService.updateById(employee);
}

每次都需要维护这两个属性未免过于麻烦,好在 MyBatisPlus 提供了字段自动填充功能来帮助我们进行管理,需要使用到的是 @TableField 注解:

@Data
@TableName("tbl_employee")
public class Employee {@TableId(type = IdType.AUTO)private Long id;private String lastName;private String email;private Integer age;@TableField(fill = FieldFill.INSERT) // 插入的时候自动填充private LocalDateTime gmtCreate;@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新的时候自动填充private LocalDateTime gmtModified;
}

然后编写一个类实现 MetaObjectHandler 接口:

@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 实现插入时的自动填充* @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {log.info("insert开始属性填充");this.strictInsertFill(metaObject,"gmtCreate", LocalDateTime.class,LocalDateTime.now());this.strictInsertFill(metaObject,"gmtModified", LocalDateTime.class,LocalDateTime.now());}/*** 实现更新时的自动填充* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {log.info("update开始属性填充");this.strictInsertFill(metaObject,"gmtModified", LocalDateTime.class,LocalDateTime.now());}
}

该接口中有两个未实现的方法,分别为插入和更新时的填充方法,在方法中调用 strictInsertFill() 方法 即可实现属性的填充,它需要四个参数:

  • metaObject:元对象,就是方法的入参
  • fieldName:为哪个属性进行自动填充
  • fieldType:属性的类型
  • fieldVal:需要填充的属性值

此时在插入和更新数据之前,这两个方法会先被执行,以实现属性的自动填充,通过日志我们可以进行验证:

@Test
void hh(){Employee employee = new Employee();employee.setLastName("lisa");employee.setEmail("lisa@qq.com");employee.setAge(23);employeeService.updateById(employee);
}

在这里插入图片描述

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

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

相关文章

python炒股自动化(0),申请券商API接口

上次发了量化交易接口的区别,发现很多人根本不知道券商提供的API交易接口,这里补充一篇,关于券商接口的介绍。 现在市面上可以给个人账户接入的股票交易接口,用的最多的也就是QMT和Ptrade,以前接入量化交易需要机构或…

java通过okhttp方式实现https请求的工具类(绕过证书验证)

目录 一、引入依赖包二、okhttp方式实现的https请求工具类2.1、跳过证书配置类2.2、okhttp方式的 https工具类 三、测试类 一、引入依赖包 引入相关依赖包 <!--okhttp依赖包--> <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>…

Linux(Centos7)安装 jenkins(jdk11+jenkins2.375),并配置JDK,Maven,Git,GitLab

安装步骤 1. JDK11安装2. Maven安装3. git安装4. Jenkins2.375安装4.1 设置中文显示4.2 端口,用户权限修改4.3 插件下载4.4 全局工具配置4.4.1 Maven配置4.4.2 JDK配置4.4.3 Git配置 4.5 系统配置4.5.1 Gitee配置 4.6 构建测试 1. JDK11安装 #下载 yum -y install fontconfig …

SpringBoot 把PageHelper分页信息返回给前端

第1步&#xff1a;定义线程容器收纳HttpHeaders和HttpStatus import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus;public class ResponseUtils {private static ThreadLocal<HttpHeaders> ThreadLocalHeaders new InheritableT…

SQL-DCL-如何用户管理,如何给用户权限?

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

计算机网络-2019期末考试解析

【前言】 从内容上看比较像计算机网络课程了&#xff0c;先做了。 一&#xff0e;填空选择题&#xff08;共 20 分&#xff0c;每空 1 分&#xff09; 1 、双绞线由两根相互绝缘的、绞合成均匀的螺纹状的导线组成&#xff0c;下列关于双绞线的叙述&#xff0c;不正确的是___ __…

多端多用户万能DIY商城系统源码:自营+多商户入驻商城系统 独立部署 带完整的安装代码包以及搭建教程

电子商务行业日新月异&#xff0c;许多企业希望能够通过线上商城拓展业务。但是&#xff0c;传统商城系统往往无法满足多样化、个性化的需求&#xff0c;而且开发周期长、成本高。罗峰就来给大家分享一款多端多用户万能DIY商城系统源码&#xff0c;搭建简单。 以下是部分代码示…

win系统搭建Minecraft世界服务器,MC开服教程,小白开服教程

Windows系统搭建我的世界世界服务器&#xff0c;Minecraft开服教程&#xff0c;小白开服教程&#xff0c;MC 1.19.4版本服务器搭建教程。 此教程使用 Mohist 1.19.4 服务端&#xff0c;此服务端支持Forge模组和Bukkit/Spigot/Paper插件&#xff0c;如果需要开其他服务端也可参…

【Node.js学习 day4——模块化】

模块化介绍 什么是模块化与模块&#xff1f; 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为模块化 其中拆分的每个文件就是一个模块&#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用。什…

网上的大流量卡,这几点不注意你就申请不到了

网上的大流量卡月租低&#xff0c;流量多&#xff0c;相对于手机套餐每个月我们可以省下不少的费用&#xff0c;但是&#xff0c;流量卡便宜归便宜&#xff0c;也并不是随便申请的&#xff0c;以下这几种情况大家先自查一下&#xff0c;有的话&#xff0c;建议你不要申请了&…

机器学习-线性回归

1、线性回归解决的问题 线性回归是利用被称为线性回归方程的最小平方函数对一个或者多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或者多个被称为回归系数的模型参数的线性组合。 2、一元线性回归 一元线性回归分析&#xff1a;找到一条直线能够最大程…

(Arcgis)matlab编程批量处理hdf4格式转换为tif格式

国家青藏高原科学数据中心 中国区域1km无缝地表温度数据集&#xff08;2002-2020&#xff09; 此代码仅用于该数据集处理 版本&#xff1a;arcgis10.2 matlab2020 参考&#xff1a;MATLAB hdf(h5)文件转成tif图片格式&#xff08;批量处理&#xff09; 此代码仅用于该数据集处…