MySQL自动填充
一、数据库级别
1.1 表设计
create_time默认值添加CURRENT_TIMESTAMP。
update_time默认值添加CURRENT_TIMESTAMP,更新打勾。

1.2 验证是否成功
-- 插入
INSERT INTO `xiaoqiangzai`.`user_info` (`nickname`) VALUES ('小强');
-- 更新
UPDATE `xiaoqiangzai`.`user_info` SET `nickname` = '辣鸡' where id = 15

二、代码填充级别
2.1 实体类加上注解
// 插入时填充
@TableField(fill = FieldFill.INSERT)
// 插入和更新时填充
@TableField(fill = FieldFill.INSERT_UPDATE)
package com.qiang.mybaties.plus.test.mysql.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author 小强崽
* @create: 2020-12-24 16:04:44
* @description: 实体类
*/
@Data
public class FileInfo extends Model<FileInfo> {
/**
* 主键
*/
private Integer id;
/**
* 用户ID
*/
private Integer userId;
/**
* 文件名
*/
private String name;
/**
* 文件位置
*/
private String location;
/**
* 文件大小
*/
private Integer sizes;
/**
* 文件类型
*/
private String type;
/**
* 文件描述
*/
private String description;
/**
* 文件属性: 0只读1读写
*/
private Integer property;
/**
* 状态: 0关闭1启用
*/
private Integer status;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 获取主键值
*
* @return 主键值
*/
@Override
protected Serializable pkVal() {
return this.id;
}
}
2.2 自动填充配置类
package com.qiang.mybaties.plus.test.mysql.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author: 小强崽
* @create: 2020/12/24 16:08
* @description: 自动填充字段
**/
@Component
public class AutoFillConfig implements MetaObjectHandler {
private static final Logger logger = LoggerFactory.getLogger(AutoFillConfig.class);
@Override
public void insertFill(MetaObject metaObject) {
logger.info("插入数据填充字段createTime和updateTime!");
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
logger.info("更新数据填充字段updateTime!");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
2.3 验证是否成功
2.3.1 插入数据
@Test
public void testInsert() {
FileInfo fileInfo = new FileInfo();
fileInfo.setUserId(1);
fileInfo.setName("Spring");
boolean save = fileInfoService.save(fileInfo);
logger.info(String.valueOf(save));
}
填充成功

2.3.2 更新数据
Lambda 表达式执行后使用 update 方法进行部分字段更新时,并没有实体作为参数,都会引起无法触发自动填充。
失效
@Test
public void testUpdate1() {
// 自动填充失效,因为Lambda没有实体作为参数,无法触发填充。
LambdaUpdateWrapper<FileInfo> lambdaUpdateWrapper = new LambdaUpdateWrapper<FileInfo>()
.eq(FileInfo::getId, 25)
.set(FileInfo::getName, "Boot");
boolean update = fileInfoService.update(lambdaUpdateWrapper);
logger.info(String.valueOf(update));
}
填充失败

生效
@Test
public void testUpdate2() {
// 自动填充生效,因为使用了实体作为参数,触发填充。
UpdateWrapper<FileInfo> fileInfoUpdateWrapper = new UpdateWrapper<>();
fileInfoUpdateWrapper.eq("id", 25);
FileInfo fileInfo = new FileInfo();
fileInfo.setName("Boot");
boolean update = fileInfoService.update(fileInfo, fileInfoUpdateWrapper);
logger.info(String.valueOf(update));
}
填充成功

作者(Author):小强崽
来源(Source):https://www.wuduoqiang.com/archives/MySQL自动填充
协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
版权(Copyright):商业转载请联系作者获得授权,非商业转载请注明出处。 For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source.
MySQL自动填充的更多相关文章
- Mysql自动填充测试数据
前言 最近写了两个小脚本,一个应用于Mysql的自动填充测试数据,另外一个是bash写的定期删除日志文件,两个脚本如何使用,在GitHub上面都有所说明,这里不再赘述,这里主要是想聊一下Mysql的存 ...
- Mysql自动设置时间(自动获取时间,填充时间)
应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...
- ThinkPHP 自动验证与自动填充无效可能的原因(转)
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...
- Mybatis plus通用字段自动填充的最佳实践总结
在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改 ...
- 项目集成seata和mybatis-plus冲突问题解决方案:(分页插件失效, 自动填充失效, 自己注入的id生成器失效 找不到mapper文件解决方案)
项目集成seata和mybatis-plus,seata与mybatis-plus冲突问题(所有插件失效,自动填充失效,找不到mapper文件解决方案) 自动填充代码: package com.fro ...
- chrome防止自动填充密码
是防止,不是禁止.禁止需要在浏览器设置. chrome浏览器保存密码之后,页面上有password存在的时候会出现自动填充用户名和密码的情况. 添加disableautocomplete和autoco ...
- combobox实现模糊查询自动填充
利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...
- 【菜鸟玩Linux开发】通过MySQL自动同步刷新Redis
在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...
- mysql 自动备份和nginx自动安装脚本
一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...
随机推荐
- ZooKeeper 分布式锁 Curator 源码 01:可重入锁
前言 一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁.也就是 Curator 这个 ...
- lombok之@Data
在实体类的编写过程中,常常需要应用大量的get.set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以 ...
- File类与常用IO流第二章过滤器
在第一章中,有一个练习使用递归搜索文件 1 public static void main(String[] args) { 2 File f=new File("E:\\aaa" ...
- maven添加阿里云镜像
apache的maven服务器国内访问太慢了,用阿里的镜像会好很多. 1.maven的配置文件有两个,安装目录conf文件夹下settings.xml和用户目录.m2文件夹下的settings.xml ...
- Appium - adb monkey参数(三)
monkey 参数 1.常规类参数 A.帮助类参数 monkey -h B.日志级别 $ adb shell monkey -v <event-count> . 2.事件类参数 A .执 ...
- 龙芯 loongnix20 rc2 初体验
2021-07-24 v0.0.1 版权声明:原创文章,未经博主允许不得转载 3A5000 昨天发布啦,历史上的昨天是中共一大的第一天. 3A5000 的团购还没开始(大概还是3999左右整机的样子) ...
- 小师妹学IO系列文章集合-附PDF下载
目录 第一章 IO的本质 IO的本质 DMA和虚拟地址空间 IO的分类 IO和NIO的区别 总结 第二章 try with和它的底层原理 简介 IO关闭的问题 使用try with resource ...
- 【超值分享】为何写服务器程序需要自己管理内存,从改造std::string字符串操作说起。。。
服务器程序为何要进行内存管理,管中窥豹,让我们从string字符串的操作说起...... new/delete是用于c++中的动态内存管理函数,而malloc/free在c++和c中都可以使用,本质上 ...
- go反射原理
go反射原理 本文基于go1.13.15 1.go汇编 1.1 基本语法 go采用plan9的汇编器完成汇编,有下面几个重要的伪寄存器 FP: Frame pointer: 局部变量访问 PC: Pr ...
- Word中的代码怎样语法高亮
在平常我们粘贴代码到Word中的时候,经常会遇到代码粘贴到Word中后没有语法高亮,看着很乱很不友好,Word自带的样式---语法使用着也不尽人意, 网上有很多做法可以使得在插入在Word中的代码能够 ...