一、数据库


表中新增“添加时间”和“修改时间”字段;

二、实体类 Entity


在实体类中的“添加时间”和“修改时间”的属性字段中添加 @TableField(fill = FieldFill.INSERT),其中 FieldFill 中包含默认(DEFAULT), 插入(INSERT), 修改(UPDATE), 插入和修改(INSERT_UPDATE)你可以点进源码进行查看;

 1 public class EduTeacher implements Serializable {
2
3 //注意!这里需要标记为填充字段
4 @TableField(fill = FieldFill.INSERT)
5 @ApiModelProperty(value = "创建时间")
6 private Date gmtCreate;
7
8 @TableField(fill = FieldFill.INSERT_UPDATE)
9 @ApiModelProperty(value = "更新时间")
10 private Date gmtModified;
11
12 }

三、 公共类


采用AOP的思想,实现 MetaObjectHandler接口,并实现其中的 insertFill updateFill 方法,如下:

 1 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
2 import org.apache.ibatis.reflection.MetaObject;
3 import org.springframework.stereotype.Component;
4
5 import java.util.Date;
6
7 /**
8 * @description:
9 * @author: zzx
10 * @createDate: 2020/6/1
11 * @version: 1.0
12 */
13 @Slf4j
14 @Component
15 public class MyMetaObjectHandler implements MetaObjectHandler {
16 @Override
17 public void insertFill(MetaObject metaObject) {
18 log.info("start insert fill ....");
19 //属性名称,不是字段名称
20 this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
21 //this.fillStrategy(metaObject, "gmtCreate", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
22 /* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
23 //this.setFieldValByName("gmtCreate",new Date(),metaObject);
24 //this.setFieldValByName("gmtModified",new Date(),metaObject);
25 }
26
27 @Override
28 public void updateFill(MetaObject metaObject) {
29 log.info("start update fill ....");
30 this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
31 //this.fillStrategy(metaObject, "gmtModified", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
32 /* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
33 //this.setUpdateFieldValByName("gmtModified", LocalDateTime.now(), metaObject);
34 //this.setFieldValByName("gmtModified",new Date(),metaObject);
35 }
36 }

注意事项:
【1】字段必须声明TableField注解,属性fill选择对应策略,该声明告知 Mybatis-Plus需要预留注入SQL字段;
【2】填充处理器 MyMetaObjectHandler在 Spring Boot 中需要声明 @Component@Bean注入;
【3】要想根据注解 FieldFill.xxx和字段名以及字段类型来区分必须使用父类的 strictInsertFill或者 strictUpdateFill方法;
【4】不需要根据任何来区分可以使用父类的 fillStrategy方法 ;

四、MyBatisPlus 依赖(一般项目中都有,你可能不需要)


1 <!--mybatis-plus-->
2 <dependency>
3 <groupId>com.baomidou</groupId>
4 <artifactId>mybatis-plus-boot-starter</artifactId>
5 <scope>provided </scope>
6 </dependency>

五、测试


【1】测试请求
【2】数据库结果

MyBatisPlus 自动填充演示的更多相关文章

  1. MybatisPlus自动填充公共字段的策略

    背景:数据库中多个表有时间字段,并且字段名一致 需求:该时间字段由MybatisPlus自动插入和更新,业务代码无需处理 方法: 一.创建基础实体[BaseEntity],定义需要处理的公共字段(创建 ...

  2. mybatis-plus自动填充

    1,给字段添加注解 @TableField(value = "create_time", fill = FieldFill.INSERT) 2,添加填充处理器,需要实现接口Meta ...

  3. 小书MybatisPlus第9篇-常用字段默认值自动填充

    本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...

  4. 【mybatis-plus】主键id生成、字段自动填充

    一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UU ...

  5. MP(MyBatis-Plus)的自动填充功能

    什么是自动填充 有些表中会有更新时间.创建时间.更新人或者创建人这些字段. 每次对数据进行新增.删除.修改时都需要对这些字段进行设置.传统的做法是在进行这些操作前,对Entity的字段进行set设置, ...

  6. 项目集成seata和mybatis-plus冲突问题解决方案:(分页插件失效, 自动填充失效, 自己注入的id生成器失效 找不到mapper文件解决方案)

    项目集成seata和mybatis-plus,seata与mybatis-plus冲突问题(所有插件失效,自动填充失效,找不到mapper文件解决方案) 自动填充代码: package com.fro ...

  7. mybatis-plus时间字段自动填充

    时间代码自动填充的2种方式 数据库方式 将数据库字段create_time和update_time设置CURRENT_TIMESTAMP,create_time字段后面不需要勾选更新,update_t ...

  8. Mybatis-Plus使用@TableField实现自动填充日期

    一.前言 我们在日常开发中经常使用ORM框架,比如Mybatis.tk.Mybatis.Mybatis-Plus.不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建时间.更新时间.创建 ...

  9. mybatis-plus 自动生成代码

    public class MpGenerator { /** * <p> * MySQL 生成演示 * </p> */ public static void main(Stri ...

  10. jQuery 实现带下拉提示且自动填充的邮箱

    /* ** 本文例子所引用的jQuery版本为 jQuery-1.8.3.min.js ** Author:博客园小dee*/ 本文用 jQuery 实现一个用户输入字符时出现能够提示邮箱后缀名的下拉 ...

随机推荐

  1. spring的作用

    Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB.如果你仅仅使用了Struts或其他的包含了J2EE特有API的framework,你会发现Spring关注了遗留下的问题.Sprin ...

  2. mermaid工具

    mermaid支持:流程图.时序图.甘特-等图表的绘制:可在线编辑,保存代码.图片. mermaid :官网.在线编辑器.操作手册

  3. 微信小程序:流程/步骤流/时间轴自定义组件

    效果图: 1.首先在小程序components目录下新建一个名为step的文件夹,再建step组件名.结构如下. 直接上代码 step.wxml <view class="step&q ...

  4. nuxt项目npm install 或安装sass时报错

    初始化nuxt项目时,多人开发,同事提前安装的sass ,拉去代码初始化npm install 时提示gyp版本有问题.找了好多方法,最后还是将node.js版本降低了.原来是16.13.2降低为14 ...

  5. opencv3 7.3 重映射 仿射变换

    重映射的概念 将一幅图像某位置的像素放置到另外一幅图像的指定位置上,需要对非整数像素坐标重映射来表达每个像素的新位置. g(x,y)=f(h(x,y)); 实现重映射 remap()函数 dst(x, ...

  6. js-label

    js中的label就像一个对已有语句块的命名,函数有了函数名我们可以随时调用它,语句块有了语句名我们也可以随时调用它,将他运用到循环中可快速跳出 循环. var num = 0;for (var i ...

  7. 2、Java程序设计环境

    1.JDK Java开发工具箱 在Java 9之前,有32位和64位两个版本的Java开发工具包.现在Oracle公司不在开发32位版本,要使用Oracle JDK,你需要有一个64位的操作系统. 安 ...

  8. Python抓取数据具体流程

    之前看了一段有关爬虫的网课深有启发,于是自己也尝试着如如何过去爬虫百科"python"词条等相关页面的整个过程记录下来,方便后期其他人一起来学习. 抓取策略 确定目标:重要的是先确 ...

  9. Day1.无敌难受且成功

    Markdown学习 标题 字体 ctrl+b.l.u.k加粗.斜体.下划线.超链接 引用 大于号+空格 分割线 三个*** ###都 图片 !+[]+() 英文输入法的符号 输入的图片路径可本地也要 ...

  10. Nginx系列---【配置文件中静态资源文件禁止通过目录查看】

    配置文件中静态资源文件禁止通过目录查看 1.问题 nginx作为文件服务器时,默认是可以通过目录路径查看该目录下的所有文件的,这样很不安全,容易造成静态资源泄露. 2.方案 location /ima ...