一、数据库级别

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. java基础---集合(2)

    一. Set 集合 java.util.Set集合是Collection集合的子集合,与List集合平级.该集合中元素没有先后放入次序,且不允许重复. 存储的数据在底层数组中并非按照数组索引的顺序添加 ...

  2. 前端-js基础

    HTML三把利剑之一,浏览器具有解析js的能力 一.js基础 在HTML中可以将JavaScript/JS的代码写在head中,被script标签所包裹,当浏览器解释HTML时,遇到style标签时, ...

  3. C语言:char总结

    char字符型数据1.用单引号限制的1字节的字符称为字符型数据,字符型常量2.字符型常量实质保存的是对应字符的ASCII码值,是一个整数3.字符型常量表示范围:0-2554.声明字符型变量 char ...

  4. SpringMVC架构(一)

    SpringMVC架构 1.1Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来 ...

  5. AT2390 Games on DAG

    AT2390 Games on DAG 题意 \(1,2\) 号点各一个石头,每次沿边移动一个石头,不能动者输.求所有连边子集中先手胜的情况. 思路 发现对于两个石头的 SG 函数是独立的,输者两个石 ...

  6. GetOverlappedResult 函数

    BOOL GetOverlappedResult( HANDLE hFile, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferre ...

  7. 【用例】编写App测试用例的关注点

    编写App测试用例的关注点 如何做到测试用例的百分百覆盖一直是测试用例编写过程中的难点,首先在测试时我们经常会遇见一些常见的bug,那么我们可以在编写测试用例时考虑到这些点.    一:关于业务逻辑 ...

  8. [源码解析] 机器学习参数服务器ps-lite (1) ----- PostOffice

    [源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 目录 [源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 0x00 ...

  9. mysql安装简书

    mysql下载地址:https://dev.mysql.com/downloads/mysql/ mysql可视化工具下载地址:https://dev.mysql.com/downloads/work ...

  10. JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)

    检测漏洞 工具 下载地址:https://github.com/joaomatosf/JavaDeserH2HC javac -cp .:commons-collections-3.2.1.jar E ...