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的自动填充功能相关推荐

  1. MyBatis-Plus 高级功能 —— 自动填充功能

    一.引言 小编先来解释下自动填充是做什么的,大家有没有在数据入库的时候,不管新增或者修改数据,都要手动来设置添加时间和修改时间.而且每个插入都需要设置,而且数据库还设置不能为空,就很烦恼. 虽然可以在 ...

  2. excel填充序列_猴哥讲述:excel的自动填充功能——自动填充单元格

    我们都知道excel的自动填充功能非常的好用,自动填充功能可以帮我们在工作中大大的提升工作效率,同时还可以准确无误的帮助我们进行数据自动输入,我们也可以自定义自动填充的序列. 一.自动填充功能,是指我 ...

  3. MyBatis-Plus——自动填充功能实现

    文章目录 MyBatis-Plus--自动填充功能 1.什么是自动填充 2.数据库层面实现 3.编程实现(推荐) MyBatis-Plus--自动填充功能 1.什么是自动填充 有些表中会有更新时间up ...

  4. MyBatis-plus自动填充功能之自动填充时间

    MyBatis-plus自动填充功能之自动填充时间 一.前期工作 二.自动填充 2.1 数据库级别 2.2 代码级别 在实际操作过程中,我们并不希望创建时间.修改时间这些来手动进行,而是希望通过自动化 ...

  5. 【MyBatis-Plus】实现字段自动填充功能

    一.前言 在项目中,我们有一些公共的字段需要做修改 如: gmt_create:创建时间 creator_id:创建人 gmt_modified:修改时间 modifier_id:修改人 这时候我们可 ...

  6. 谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法

    为了避免用户在登录同一网站时频频输入账号.密码的现象,谷歌在自家的Chrome浏览器中贴心的加入了"自动填充功能".那么,谷歌浏览器自动填充功能要怎么开启呢?不清楚操作方法的朋友, ...

  7. MySQL实现字段自动填充功能

    根据阿里巴巴开发手册,有这么一句话:所有的数据库表当中必须有gmt_create.gmt_modified,几乎所有的表都要配置上!而且需要自动化!!! 对于创建时间.修改时间这些字段,我们是希望在添 ...

  8. 360 html禁止自动填充,360极速浏览器如何停用“自动填充”功能

    360极速浏览器管理停用"自动填充"功能的方法如下: 1.使用"自动填充选项"对话框添加.编辑或删除已创建的"自动填充"条目. 2.点击地址 ...

  9. EXCEL2016的 ctrl+E 神奇的自动填充功能

    自动填充功能 1 完全不需要写公式 2 原始数据列,边上,新增新的列 3 选择新列的空白地方,按  ctrl + E  很神奇

最新文章

  1. Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
  2. Java 洛谷 P1464 Function
  3. Java基础学习总结(172)——手写Java 重试机制
  4. Javascript:谈谈JS的全局变量跟局部变量
  5. 第十讲 线性反馈移位寄存器
  6. 一次 svchost.exe 进程占用大量网络带宽的排查
  7. python 日本 地图 热力图_python 在百度地图上画热力图
  8. Unity3D怪物基本AI
  9. 根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角
  10. ORACLE AutoVue 服务器/桌面版/WebService/SDK安装
  11. (02) Apache Felix 入门 - 02
  12. 2018广告屏蔽软件
  13. c语言windows.h头文件详解
  14. 【Q - Phalanx】
  15. STM32F407ZG定时器
  16. 云原生之Kubernetes:18、详解准入控制器
  17. Java8 ConcurrentLinkedQueue和LinkedTransferQueue 源码解析
  18. 7-4 Swan学院社团招新 (20 分)
  19. 舒亦梵:4.24非农周即将来临,黄金趋势将会何去何从
  20. bugku_逆向_游戏过关

热门文章

  1. IE浏览器出现版本过低升级字样的解决方案
  2. 小心计算机视觉综合征!快来get护眼大法……
  3. SQL数据计数(count)
  4. Windows Home Server 是什么?
  5. linux parted 直接删除分区,CentOS7硬盘分区,删除分区,格式化分区硬盘,支持4T硬盘,fdisk,parted简单用法...
  6. Centos7使用xrdp进行远程桌面访问
  7. 异步FIFO基本原理(基于Verilog的简单实现)
  8. 异步FIFO的原理以及可综合的Verilog代码
  9. IC学习笔记3——异步FIFO
  10. Rxswift学习之(一)函数响应式编程思想