Mybatis-plus的自动填充功能
1.概述
在我们开发过程中,经常需要做一些插入操作,有些麻烦,特别是对于一些每次插入或修改都需要改变的的一些字段,例如创建时间和修改时间两个字段,和数据没什么关系但是每次修改都需要被动修改这两个字段,所以Mybatis-plus为我们带来了自动填充功能,可以在我们创建或修改时自动填充或修改这些字段。
2.介绍
FieldFill为我们提供了多种填充模式
public enum FieldFill {/*** 默认不处理*/DEFAULT,/*** 插入时自动填充*/INSERT,/*** 修改时自动填充*/UPDATE,/*** 插入或修改时自动填充*/INSERT_UPDATE;private FieldFill() {}}
我们只需要将@TableField(fill = FieldFill.INSERT)注解放在字段上面即可为这个字段设置自动填充
@TableField(fill = FieldFill.INSERT_UPDATE) // 插入或修改数据时进行填充
private Integer version;
创建一个类MyMetaObjectHandler继承MetaObjectHandler 定义插入和修改填充策略
/*** @author wangli* @data 2022/4/15 17:08* @Description:自定义自动填充*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {Integer version = 1;@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "version", Integer.class,1);}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "version", Integer.class,version++);}
}
3.实例
3.1 导入mybatis-plus的依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>
3.2 配置自动填充的规则
此配置使用的是之前的mybatis-plus提供的配置方法,上面的配置方式是最新的配置方案,
此配置方案配置的是创建时间为空时如果当前有插入操作给created和updated字段插入当前时间,
如果更新数据时,更新updated字段为当前时间。
/*** @author wangli* @data 2022/3/21 11:30* @Description:*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {Object created = getFieldValByName("created", metaObject);if (null == created) {//字段为空,可以进行填充setFieldValByName("created", new Date(), metaObject);}Object updated = getFieldValByName("updated", metaObject);if (null == updated) {//字段为空,可以进行填充setFieldValByName("updated", new Date(), metaObject);}}@Overridepublic void updateFill(MetaObject metaObject) {//更新数据时,直接更新字段setFieldValByName("updated", new Date(), metaObject);}
}
3.3 使用注解对字段进行自动填充
创建实体工具类BasePojo ,通过继承此实体类,达到可重复使用,降低代码耦合度,防止代码重复的作用。
@Data
public abstract class BasePojo implements Serializable {@TableField(fill = FieldFill.INSERT) //自动填充private Date created;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updated;}
3.4 实体类继承BasePojo
@Data
@AllArgsConstructor //满参构造方法
@NoArgsConstructor //无参构造方法
@ApiModel(value = "User", description = "用户信息")
public class User extends BasePojo {@ApiModelProperty(value = "主键")@TableId(value = "id",type = IdType.ASSIGN_ID)private Long id;@ApiModelProperty(value = "电话")@TableField("mobile")private String mobile;@ApiModelProperty(value = "密码")@TableField("password")private String password;
}
4. mybatis-plus官方示例工程
mybatis-plus-samples: MyBatis-Plus Samples 文档 - Gitee.comhttps://gitee.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-auto-fill-metainfo
Mybatis-plus的自动填充功能相关推荐
- MyBatis-Plus 高级功能 —— 自动填充功能
一.引言 小编先来解释下自动填充是做什么的,大家有没有在数据入库的时候,不管新增或者修改数据,都要手动来设置添加时间和修改时间.而且每个插入都需要设置,而且数据库还设置不能为空,就很烦恼. 虽然可以在 ...
- excel填充序列_猴哥讲述:excel的自动填充功能——自动填充单元格
我们都知道excel的自动填充功能非常的好用,自动填充功能可以帮我们在工作中大大的提升工作效率,同时还可以准确无误的帮助我们进行数据自动输入,我们也可以自定义自动填充的序列. 一.自动填充功能,是指我 ...
- MyBatis-Plus——自动填充功能实现
文章目录 MyBatis-Plus--自动填充功能 1.什么是自动填充 2.数据库层面实现 3.编程实现(推荐) MyBatis-Plus--自动填充功能 1.什么是自动填充 有些表中会有更新时间up ...
- MyBatis-plus自动填充功能之自动填充时间
MyBatis-plus自动填充功能之自动填充时间 一.前期工作 二.自动填充 2.1 数据库级别 2.2 代码级别 在实际操作过程中,我们并不希望创建时间.修改时间这些来手动进行,而是希望通过自动化 ...
- 【MyBatis-Plus】实现字段自动填充功能
一.前言 在项目中,我们有一些公共的字段需要做修改 如: gmt_create:创建时间 creator_id:创建人 gmt_modified:修改时间 modifier_id:修改人 这时候我们可 ...
- 谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法
为了避免用户在登录同一网站时频频输入账号.密码的现象,谷歌在自家的Chrome浏览器中贴心的加入了"自动填充功能".那么,谷歌浏览器自动填充功能要怎么开启呢?不清楚操作方法的朋友, ...
- MySQL实现字段自动填充功能
根据阿里巴巴开发手册,有这么一句话:所有的数据库表当中必须有gmt_create.gmt_modified,几乎所有的表都要配置上!而且需要自动化!!! 对于创建时间.修改时间这些字段,我们是希望在添 ...
- 360 html禁止自动填充,360极速浏览器如何停用“自动填充”功能
360极速浏览器管理停用"自动填充"功能的方法如下: 1.使用"自动填充选项"对话框添加.编辑或删除已创建的"自动填充"条目. 2.点击地址 ...
- EXCEL2016的 ctrl+E 神奇的自动填充功能
自动填充功能 1 完全不需要写公式 2 原始数据列,边上,新增新的列 3 选择新列的空白地方,按 ctrl + E 很神奇
最新文章
- Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
- Java 洛谷 P1464 Function
- Java基础学习总结(172)——手写Java 重试机制
- Javascript:谈谈JS的全局变量跟局部变量
- 第十讲 线性反馈移位寄存器
- 一次 svchost.exe 进程占用大量网络带宽的排查
- python 日本 地图 热力图_python 在百度地图上画热力图
- Unity3D怪物基本AI
- 根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角
- ORACLE AutoVue 服务器/桌面版/WebService/SDK安装
- (02) Apache Felix 入门 - 02
- 2018广告屏蔽软件
- c语言windows.h头文件详解
- 【Q - Phalanx】
- STM32F407ZG定时器
- 云原生之Kubernetes:18、详解准入控制器
- Java8 ConcurrentLinkedQueue和LinkedTransferQueue 源码解析
- 7-4 Swan学院社团招新 (20 分)
- 舒亦梵:4.24非农周即将来临,黄金趋势将会何去何从
- bugku_逆向_游戏过关
热门文章
- IE浏览器出现版本过低升级字样的解决方案
- 小心计算机视觉综合征!快来get护眼大法……
- SQL数据计数(count)
- Windows Home Server 是什么?
- linux parted 直接删除分区,CentOS7硬盘分区,删除分区,格式化分区硬盘,支持4T硬盘,fdisk,parted简单用法...
- Centos7使用xrdp进行远程桌面访问
- 异步FIFO基本原理(基于Verilog的简单实现)
- 异步FIFO的原理以及可综合的Verilog代码
- IC学习笔记3——异步FIFO
- Rxswift学习之(一)函数响应式编程思想