一、数据库


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

二、实体类 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. css 伪类实现渐变线条

    如下图所示: 需要实现渐变的小竖线或者小横线 可以用伪类, 代码如下: div { position: relative; z-index: 2; &::after{ content: ''; ...

  2. Netty基本编写

    一. public class Server { public static void main(String[] args) throws Exception { //1 创建线两个程组 //一个是 ...

  3. ubuntu20安装open4.4带扩展库

    0查看当前版本安装 opencv_version 已经装了3.49 再装个4.4共存 1安装依赖库 sudo add-apt-repository "deb http://security. ...

  4. 通过【leaflet】 调用高德离线瓦片地图

    官网:https://leafletjs.com/ 首先在官网下载[leaflet.css]和[leaflet.js] 引用js和css <link href="js/leaflet. ...

  5. python语言linux操作系统oracle环境安装

    金句:如果没把握,最好先Google一下. 1.严格按照 https://oracle.github.io/odpi/doc/installation.html#linux 教程一步步做 包括下载的软 ...

  6. recovery gerrit

    参考wiki :https://wiki.realtek.com/pages/viewpage.action?pageId=81823331 1.修改IP: for example : Gerrit/ ...

  7. alia linux

    alias lrt='ls -lrt'

  8. How to Install VMware Tools on CentOS 6.5

    yum install perl gcc make kernel-headers kernel-devel -y [root@centos6 vmware-tools-distrib]# ./vmwa ...

  9. C语言声明与定义的区别

    转自:https://blog.csdn.net/gatieme/article/details/50640424 C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义. ...

  10. 开发者工具与idea代码缺失

    开发者工具与idea代码缺失 当categoryList为空时,<dd></dd>之间显示结果为无,所以开发者工具也无这段代码.