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

  • 一、前期工作
  • 二、自动填充
    • 2.1 数据库级别
    • 2.2 代码级别

在实际操作过程中,我们并不希望创建时间、修改时间这些来手动进行,而是希望通过自动化来完成,而mybatis-plus则也提供了自动填充功能来实现这一操作,接下来,就来了解一下mybatis-plusz的自动填充功能是如何进行操作的。

一、前期工作

准备工作完全可以参考上一篇笔记MyBatis-plus快速入门https://blog.csdn.net/junR_980218/article/details/124816265
参考mybatis-plus笔记一直到测试前面部分,然后开始参考下面的操作进行今天的内容部分。

二、自动填充

2.1 数据库级别

1、在数据库的user表中添加create_time、update_time字段

2、在实体类User中添加字段 并且天界set/get方法,有参构造方法等


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;import java.util.Date;public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;/*** 字段添加填充内容*/@TableField(fill= FieldFill.INSERT)private Date createTime;@TableField(fill=FieldFill.INSERT_UPDATE)private Date updateTime;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getUpdateTime() {return updateTime;}public void setUpdateTime(Date updateTime) {this.updateTime = updateTime;}public User() {}public User(Long id, String name, Integer age, String email, Date createTime, Date updateTime) {this.id = id;this.name = name;this.age = age;this.email = email;this.createTime = createTime;this.updateTime = updateTime;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", email='" + email + '\'' +", createTime=" + createTime +", updateTime=" + updateTime +'}';}
}

3、测试

@Test
//测试更新
public void testUpdate(){User user1 = new User();user1.setId(81L);user1.setName("关注我的公众号:狂神说java");user1.setAge(3);user1.setEmail("18058429082qq.com");//updateById 参数是一个对象int i = userMapper.updateById(user1);System.out.println(user1);}


测试结果

可以从控制台的日志中看到,根本没有对时间的这两个字段进行操作,但是数据库中的时间已经进行了修改,这就是数据库级别的自动填充

但是在我们日常的开发过程中,是不允许轻易修改数据库的,所以上面这种数据库级别的操作不实用,于是我们进行下一种代码级别的操作,来实现同样的时间填充功能。

2.2 代码级别

1、还原上面步骤对于数据库表结构的操作,只留下create_time/update_time这两个字段即可

2、在实体类User中,对相关字段添加填充内容

/*** 字段添加填充内容*/
@TableField(fill= FieldFill.INSERT)
private Date createTime;
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;

3、编写处理器MyMetaObjectHandler来处理,对实体类字段上添加的操作


import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;/*** 这个注解 表示就是要把处理器 丢到IOC容器中  这一点千万不能忘记 !*/
@Component
/*** @author ctgu* @date 2022/5/18 8:55*/
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 插入时候的填充策略* @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {log.info("start insert fill");// setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)//给createTime这个字段和updateTime这俩字段 来一个什么值呢 来一个自动插入时间 传一个数据 这个数据就是mataObjectthis.setFieldValByName("createTime",new Date(),metaObject);this.setFieldValByName("updateTime",new Date(),metaObject);}/*** 更新时候的填充策略* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill");this.setFieldValByName("updateTime",new Date(),metaObject);}
}

4、测试

先进行插入测试

//测试插入
@Test
public void testInsert(){User user = new User();user.setName("狂神说java");user.setAge(3);user.setEmail("18058429082qq.com");int insert = userMapper.insert(user);System.out.println(insert);System.out.println(user);//User{id=1526399165514063874, name='狂神说java', age=3, email='18058429082qq.com'}//没有插入id,但是却存在id  说明他帮我们自动生成了id
}

更新测试

 @Test//测试更新public void testUpdate(){User user1 = new User();user1.setId(1526399165514063878L);user1.setName("关注我的公众号:狂神说java");user1.setAge(3);user1.setEmail("18058429082qq.com");//updateById 参数是一个对象int i = userMapper.updateById(user1);System.out.println(user1);}

测试结果 插入的时候已经把时间插入进去了,更新时候也对时间进行了更新

至此,MyBatis-plus自动填充功能之自动填充时间操作全部完成。

MyBatis-plus自动填充功能之自动填充时间相关推荐

  1. 使用jQuery-UI来实现一个Ajax的自动完成功能(自动填充搜索框的下拉值)

    首先你要在.net拓展包中去搜索  jquery ui (Combined Libray)安装这么个文件 第二部   在控制器中添加我们根据输入搜索框的值获取符合的记录集的action 第三步  有了 ...

  2. excel自动导出功能_自动关联数据字典---SpringCloud Alibaba_若依微服务框架改造---工作笔记008

    若依框架自动生成的页面,有数据导出功能,可以导出excel, 但是对于带有数据字典的字段来说,比如男女,0是男,1是女 那么这个时候,导出的excel中就会显示出来.0,1而不会显示出来 汉字,男,女 ...

  3. opencv-python实现PS中的油漆填充功能,一键填充颜色 以及opencv经常报错的可能原因

    首先先解决opencv报错问题,一上来就报错 头很疼 cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req- ...

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

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

  5. 你有试过AutoCAD的超级填充功能吗?

    之所以称之为超级填充,是因为与普通填充相比,超级填充可以利用块.图像.外部参照.已存在实体等对封闭区域进行填充.AutoCAD扩展工具有此新功能,可以轻松解决找不到合适填充图案的燃眉之急,同时还有些常 ...

  6. zabbix通过自动发现功能实现自动识别网络设备接口

    可是现在公司上线了一大批网络设备,如果要每个网络设备都做模板,添加item......那就该废了,于是迫于压力今天来测试使用zabbix的自动发现功能实现自动发现网络设备接口,并且自动获取接口的流量值 ...

  7. Allegro利用Skill实现BGA封装的自动扇出功能

    此代码并非原创,是根据Cadence Skill论坛的一份代码修改而来,主要功能是: 用户自己指定位号(需要BGA封装)和过孔,实现该位号的自动扇出功能(自动打孔+自动将过孔和焊盘连接),代码如下: ...

  8. android 快盘接口,金山快盘Android版自动备份功能详解

    近日,金山快盘Android版发布了新版本--1.9.3版,在这一版本中,小编发现了几大功能上的亮点,诸如密码锁功能.增加了常见问题答疑.优化"问题反馈"功能等,但是,新版手机快盘 ...

  9. FlashBuilder4的小技巧 代码自动完成 和 代码自动提示

    1 使用空格或其他字符 完成代码输入 一般都是键入"." 开始提示代码, 但是我们可以设置其他的键盘字符更快的输入 进入 菜单"窗口"-> "首 ...

最新文章

  1. android系统的测试方法,运行测试  |  Android 开源项目  |  Android Open Source Project...
  2. ES6入门概览二--数组
  3. 用Jackson进行Java JSON处理
  4. 国科大高级人工智能6-GAN
  5. “科学学”视角下的科研工作者行为研究
  6. matlab的示波器保存figure图像
  7. php分页上一页下一页判断,一个分页函数:显示“上一页下一页”等
  8. java查询比对是否重复_java-对象的ArrayList,比较对象并查找重复项,...
  9. commons-logging和slf4j都是日志的接口
  10. 《Go学习笔记 . 雨痕》流程控制(if、switch、for range、goto、continue、break)
  11. 【运维安全】-HTTP协议
  12. 通讯录_你有多久没翻过通讯录了?
  13. iOS小技能:OCR的使用(身份证/营业执照/车牌/银行卡识别)
  14. [rhel6.5]DHCP分配IP地址以及保留地址
  15. 【依赖高精度点云地图和三维激光雷达的定位方案】正态分布变换(NDT)定位及建图
  16. 惠普打印机墨盒更换教程_惠普打印机换墨盒图解 惠普打印机怎么换墨盒
  17. 机器学习推荐算法之关联规则(Apriori)——支持度;置信度;提升度
  18. 程序员真的需要读研究生么?
  19. ETH 或者 ERC20 如何通过 TxID 查询充值状态
  20. 【方法】树莓派开机使用教程(看这个就够了)

热门文章

  1. 深度解读物联网区块链“IOTA”:不仅解决IoT痛点,还解决区块链痛点
  2. 【Nvivo】什么是定性研究
  3. 【项目管理】--- 时间管理 --- 缩短工期
  4. HIVE基础知识及优化(面试必备)
  5. Redis底层原理和数据结构-总结篇
  6. 学习coreldraw
  7. 【UE】倒计时归零时结束游戏
  8. 2411681-88-2,Thalidomide-O-PEG4-NHS ester它与胺部分反应
  9. JavaWeb jQuery
  10. Simulink系列 —— S-function的使用笔记(1)