java自动更新实体类的创建时间和更新时间3种方式

一、使用数据库的自动更新机制

1.创建表时设置创建时间和更新时间的默认值

ALTER TABLE lspace_diga.hot_city
MODIFY COLUMN gmtCreate TIMESTAMP DEFAULT CURRENT_TIMESTAMP;ALTER TABLE lspace_diga.hot_city
MODIFY COLUMN gmtModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

2.更新时间

触发器:创建一个数据库触发器,当记录被更新时自动更新 gmtModified 字段。

CREATE TRIGGER before_update_hot_city
BEFORE UPDATE ON lspace_diga.hot_city
FOR EACH ROW
SET NEW.gmtModified = CURRENT_TIMESTAMP;

 二、使用 MyBatis-Plus 提供的功能

1.注解实体类(使用 @TableField 的 fill 属性)

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;@Data
@TableName("lspace_diga.hot_city")
public class HotCity {@TableId(value = "id", type = IdType.AUTO)private Long id;private Long shopId;private Integer cityScore;private Integer hometownScore;private String name;private String code;@TableField(fill = FieldFill.INSERT)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date gmtCreate;@TableField(fill = FieldFill.INSERT_UPDATE)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date gmtModified;
}

 2.编写 MetaObjectHandler(创建一个类实现 MetaObjectHandler 接口,用于自动填充字段

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "gmtCreate", Date.class, new Date());this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date());}
}

3.MyBatisPlus自动填充功能不生效的原因

3.1 没有正确配置MetaObjectHandler

  • 实现类未被扫描到(使用 @Component 注解)
  • 实体类和实现类字段对应
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "gmtCreate", Date.class, new Date());this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date());}
}

3.2 注解配置不正确

@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;

3.3 MyBatis-Plus 版本问题
版本问题:确保你使用的 MyBatis-Plus 版本支持自动填充功能。较旧的版本可能不支持或者存在 Bug。建议使用最新的稳定版本。

3.4 插入或更新操作不使用 MyBatis-Plus 提供的方法

直接使用 MyBatis 操作:如果你直接通过 MyBatis (而非 MyBatis-Plus 提供的 Mapper 接口) 操作数据库,自动填充可能不会生效。确保使用 MyBatis-Plus 的 Mapper 方法,如 insert、updateById 等。

 3.5 数据库字段名与实体字段名不匹配

@TableField(value = "gmt_create", fill = FieldFill.INSERT)
private Date gmtCreate;

 三、手动设置时间戳

HotCity hotCity = new HotCity();
hotCity.setShopId(123L);
hotCity.setCityScore(10);
hotCity.setHometownScore(5);
hotCity.setName("Sample City");
hotCity.setCode("SC");// 手动设置创建和更新时间
Date now = new Date();
hotCity.setGmtCreate(now);
hotCity.setGmtModified(now);// 插入记录
hotCityMapper.insert(hotCity);// 更新记录时,手动更新修改时间
hotCity.setGmtModified(new Date());
hotCityMapper.updateById(hotCity);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 pytest_runtest_makereport:如何在 pytest 中自定义测试报告

pytest_runtest_makereport 是 pytest 系统中的一个钩子函数,它允许我们在测试执行时获取测试的报告信息。通过这个钩子,我们可以在测试运行时(无论是成功、失败还是跳过)对测试结果进一步处理,比如记录日志、添加自定…

w~自动驾驶~合集16

我自己的原文哦~ https://blog.51cto.com/whaosoft/12765612 #SIMPL 用于自动驾驶的简单高效的多智能体运动预测基准 原标题:SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving 论文链接:https://ar…

外驱功率管电流型PWM控制芯片CRE6281B1

CRE6281B1 是一款外驱功率管的高度集成的电流型PWM 控制 IC,为高性能、低待机功率、低成本、高效率的隔离型反激式开关电源控制器。在满载时,CRE6281B1工作在固定频率(65kHz)模式。在负载较低时,CRE6281B1采用节能模式,实现较高的…

2025年安卓面试复习总结

文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…

【微服务】SpringBoot 整合Redis实现延时任务处理使用详解

目录 一、前言 二、延迟任务的高频使用场景 三、延迟任务常用解决方案 3.1 Quartz 3.2 DelayQueue 3.2.1 Timer + TimerTask 3.2.2 ScheduledExecutorService 3.3 Redis sorted set 3.4 RabbitMQ 四、Redis实现延时队列操作实战 4.1 Redis Sorted Set 概述 4.1.1 Re…

加固服务器有什么用?

为什么越来越多的企业和个人都在加固他们的服务器?加固服务器不仅可以保护数据安全,还能提升整体系统的稳定性和可靠性。下面是聚名网的一些介绍。 加固服务器的首要目的就是提高安全性。随着网络攻击手段的不断演变,黑客和恶意软件的威胁也…

web移动端UI框架

文章目录 Vant简介主要特点和功能适用场景和用户评价 Mint UI简介主要特点和功能 cube-ui简介特性 iView Weapp简介 uni-app简介 Vant 使用vue3版本官网:https://vant-ui.github.io/vant/#/zh-CN/ 适用vue2版本官网:https://vant-ui.github.io/vant/v2/…

亚信安全2025年第1期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件51起,本周勒索事件数量降至近一年来最低,需注意防范。从整体上看Ransomhub依旧是影响最严重的勒索家族;本周Acrusmedia和Safepay也是两个活动频繁的恶意家族,需要注意防范。本周&#…

git①111

如果你只想提交并推送一个文件,而不是所有修改过的文件,可以按照以下步骤进行操作: 步骤: 1.查看当前修改的文件: 使用 git status 来查看哪些文件被修改了。 git status 你会看到类似以下的输出,列出了…

linux网络 | http结尾、理解长连接短链接与cookie

前言:本节是http章节的最后一部分,主要解释一些小概念。讲解到了HTTP的方法,表单, 重定向等等。 现在废话不多说, 开始我们的学习吧。 ps:本节内容都是概念, 知道就行, 友友们放心观…

韩国机场WebGIS可视化集合Google遥感影像分析

目录 前言 一、相关基础数据介绍 1、韩国的机场信息 2、空间数据准备 二、Leaflet叠加Google地图 1、叠加google地图 2、空间点的标记及展示 3、韩国机场空间分布 三、相关成果展示 1、务安国际机场 2、有同类问题的机场 四、总结 前言 12月29日8时57分左右务安国际机…

基于Django的农业管理系统

一、系统背景与意义 随着信息技术的不断发展,农业生产也逐渐向智能化、信息化转型。基于Django的农业管理系统正是为了满足这一需求而设计的。该系统通过集成先进的信息技术,旨在提升农业生产效率,优化资源配置,减少人工干预&…

后台管理系统引导功能的实现

引导是软件中经常见到的一个功能,无论是在后台项目还是前台或者是移动端项目中。 那么对于引导页而言,它是如何实现的呢?通常情况下引导页是通过 聚焦 的方式,高亮一块视图,然后通过文字解释的形式来告知用户该功能的作…

nuxt3访问localstorage,sessionStorage

nuxt3在客户端的时候可以正常使用localstorage,sessionStorage,但是如果在服务端,是没有这些方法的,这个时候可以把数据存到cookie里,通过cookie来维护数据 // 访问cookie const token getCookie(token) console.log(token)// 更…

Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0

目录 首先你要定义v8的模型特征文件 下方是完整的模型编写函数 然后你要在控件窗体中定义应用这些方法以及函数 一、定义你的标签 二、下方是定义模块和坐标的方法 三、画框 完整推理函数代码块 效果展示 完整源码 训练其实和yolov10差不多 因为v10就是在v8的基础上做了优…

C 语言奇幻之旅 - 第16篇:C 语言项目实战

目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…

YOLOv10-1.1部分代码阅读笔记-instance.py

instance.py ultralytics\utils\instance.py 目录 instance.py 1.所需的库和模块 2.def _ntuple(n): 3.class Bboxes: 4.class Instances: 1.所需的库和模块 # Ultralytics YOLO 🚀, AGPL-3.0 licensefrom collections import abc from itertools import…

云安全博客阅读(二)

2024-05-30 Cloudflare acquires BastionZero to extend Zero Trust access to IT infrastructure IT 基础设施的零信任 不同于应用安全,基础设置的安全的防护紧急程度更高,基础设施的安全防护没有统一的方案IT基础设施安全的场景多样,如se…

06-RabbitMQ基础

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装 2.2.收发消息 2.2.1.交换机 2.2.2.队列 2.2.3.绑定关系 2.2.4.发送消息 2.3.数据隔离 2.3.1.用户管理 2.3.2.virtual host 3.SpringAMQP 3.1.导入Demo工程 3.2.快速入门 3.2.1.消…

【Linux系列】并发与顺序执行:在 Linux 脚本中的应用与选择

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…