一、数据库级别

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自动填充的更多相关文章

  1. Mysql自动填充测试数据

    前言 最近写了两个小脚本,一个应用于Mysql的自动填充测试数据,另外一个是bash写的定期删除日志文件,两个脚本如何使用,在GitHub上面都有所说明,这里不再赘述,这里主要是想聊一下Mysql的存 ...

  2. Mysql自动设置时间(自动获取时间,填充时间)

    应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...

  3. ThinkPHP 自动验证与自动填充无效可能的原因(转)

    自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...

  4. Mybatis plus通用字段自动填充的最佳实践总结

    在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改 ...

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

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

  6. chrome防止自动填充密码

    是防止,不是禁止.禁止需要在浏览器设置. chrome浏览器保存密码之后,页面上有password存在的时候会出现自动填充用户名和密码的情况. 添加disableautocomplete和autoco ...

  7. combobox实现模糊查询自动填充

    利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...

  8. 【菜鸟玩Linux开发】通过MySQL自动同步刷新Redis

    在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...

  9. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

随机推荐

  1. ESP32-http server笔记

    基于ESP-IDF4.1 #include <esp_wifi.h> #include <esp_event.h> #include <esp_log.h> #in ...

  2. Linux | 配置主机名称

    配置主机名称 为了便于在局域 网中查找某台特定的主机,或者对主机进行区分,除了要有 IP 地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问. 在 Linux 系统中,主 ...

  3. Python - 基本数据类型_str 字符串

    前言 字符串是编程中最重要的数据类型,也是最常见的 字符串的表示方式 单引号 ' ' 双引号 " " 多引号 """ ""&quo ...

  4. 【Azure 环境】Azure通知中心(Notification Hub)使用百度推送平台解说

    问题描述 在通知中心的页面中显示支持BaiDu,介绍一下支持的是百度(Baidu)的什么吗?Azure的这个功能在国内使用的时候是否可以保证国内安卓手机的信息送达率? 问题解答 通知中心的页面中的Ba ...

  5. VS2013产品密钥

    VS2013 产品密钥 – 所有版本  Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio ...

  6. JAVA基础之JDK、JRE、JVM关系

    什么是JRE和JDK JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE.所以安装了JDK,就不 ...

  7. 解析ArrayList的底层实现(上)

    private static final long serialVersionUID = 8683452581122892189L;//唯一序列号ID private static final int ...

  8. Python - if 条件控制

    注意 本篇图片素材都来自慕课网,因为素材过于优秀,直接拿过来了,加水印只是为了防止整篇文章被搬 前言 程序并非是一成不变的向下执行,有的时候也要根据条件的不同选择不一样的代码,这个时候便用到了分支结构 ...

  9. synchronized 优化手段之锁膨胀机制!

    synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized.然而这个情况在 JDK 1.6 时就发生了改变,JDK 1.6 ...

  10. Adaptive AUTOSAR 学习笔记 12 - 通信管理

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 CM:Communicatio ...