一、数据库


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

二、实体类 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. OC底层知识之 性能优化

    一.CPU和GPU 的介绍 1.1.在屏幕成像的过程中,CPU和GPU起着至关重要的作用 CPU(Central Processing Unit,中央处理器),对象的创建和销毁.对象属性的调整.布局计 ...

  2. 访问提示'staticfiles' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache i18n l10n log static tz

    解决方法 前端模板中{% load staticfiles %}都修改为{% load static %} 因为在django3.x中这部分做了修改,前者无法识别,只能用后者

  3. Linux查看进程调用接口跟踪命令strace

    sudo strace -f -p 9022 -e connect

  4. L0范式、L1范式、L2范式解释通俗版

    L0范数是指向量中非0的元素的个数.(L0范数很难优化求解) L1范数是指向量中各个元素绝对值之和 L2范数是指向量各元素的平方和然后求平方根 L1范数可以进行特征选择,即让特征的系数变为0. L2范 ...

  5. Dubbo调用 Mybatis 实体类一对多时,报错

    添加fetchType="eager"属性 ,急加载 作为笔记,供个人参考

  6. jsp第4个作业(2)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  7. 关于SQLServer数据库DBCC CHECKIDENT命令

    在SQLServer输入数据时,碰到有主键ID需要维护时,可使用IDENT_CURRENT和CHECKIDENT命令来维护.   一般我们的用法如下: 1) 查看且如有必要更正当前标识值:       ...

  8. C++ || const_cast 将const变量转为非const

    点击查看代码 #include <iostream> using namespace std; int main() { int a =5; const int* p=&a;//需 ...

  9. Python之常用数据类型详解

    tuple 元组 1 # 定义 2 temp = (2, ) # 规范定义,单个元素的元组 3 tem = 2, # 可行,但不规范定义 4 tep = () # 空元组 5 6 tp = (1, ' ...

  10. XML元素限定

    XML元素限定的意义:XML 用于数据交换,而标签又是可以任意定义的,为了让 XML 的编写者和使用者之间能正确交流----->需要对标签等约定.在 XML 中有两种约定方法 dtd 格式和 x ...