凡科网做网站收费吗/搜索引擎营销的英文简称

凡科网做网站收费吗,搜索引擎营销的英文简称,网页设计实训方法步骤,定兴做网站目录 一、什么是 MyBatis-Plus 自动填充? 🤔二、自动填充的原理 ⚙️三、实际例子:创建时间和更新时间字段自动填充 ⏰四、注意事项 ⚠️五、总结 🎉 🌟我的其他文章也讲解的比较有趣😁,如果喜欢…

在这里插入图片描述

目录

    • 一、什么是 MyBatis-Plus 自动填充? 🤔
    • 二、自动填充的原理 ⚙️
    • 三、实际例子:创建时间和更新时间字段自动填充 ⏰
    • 四、注意事项 ⚠️
    • 五、总结 🎉

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!

🌟了解 MyBatis-Plus 逻辑删除请看: MyBatis-Plus 逻辑删除:让数据“消失”却不真正删除的秘密!

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning

一、什么是 MyBatis-Plus 自动填充? 🤔

MyBatis-Plus 自动填充是指在执行 insertupdate 操作时,自动为某些字段设置值,而无需手动在代码中进行赋值。 这对于一些通用字段(如创建时间、更新时间、创建人、修改人等)非常有用,可以减少重复代码,提高开发效率,并保证数据的一致性。 🚀

二、自动填充的原理 ⚙️

MyBatis-Plus 通过拦截器机制,在执行 SQL 语句之前,根据配置的规则,自动为指定的字段设置值。

自动填充的实现步骤 📝

  1. 定义实体类字段: 在实体类中定义需要自动填充的字段,并使用 MyBatis-Plus 提供的注解进行标记。
  2. 编写填充处理器: 创建一个类,实现 MyBatis-Plus 提供的 MetaObjectHandler 接口,并在该类中编写填充逻辑。
  3. 配置 MyBatis-Plus: 在 MyBatis-Plus 的配置中,注册填充处理器。

三、实际例子:创建时间和更新时间字段自动填充 ⏰

假设我们有一个 User 实体类,其中包含 createTimeupdateTime 两个字段,分别表示创建时间和更新时间。

1. 定义实体类字段

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.time.LocalDateTime;@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user")
public class User extends Model<User> {private static final long serialVersionUID = 1L;@TableIdprivate Long id;private String name;private Integer age;private String email;@TableField(fill = FieldFill.INSERT) // 插入时填充字段private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时填充字段private LocalDateTime updateTime;@Overrideprotected Serializable pkVal() {return this.id;}}

解释:

  • @TableField(fill = FieldFill.INSERT):表示该字段在执行 insert 操作时进行填充。
  • @TableField(fill = FieldFill.INSERT_UPDATE):表示该字段在执行 insertupdate 操作时进行填充。
  • LocalDateTime:这里使用 LocalDateTime 作为时间类型,也可以使用 DateInstant 等。

2. 编写填充处理器

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.time.LocalDateTime;@Slf4j
@Component // 不要忘记加Component注解
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("start insert fill ....");this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill ....");this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)}
}

解释:

  • MyMetaObjectHandler 类实现了 MetaObjectHandler 接口。
  • insertFill 方法:在执行 insert 操作时,会调用该方法。 我们在这里为 createTimeupdateTime 字段设置当前时间。
  • updateFill 方法:在执行 update 操作时,会调用该方法。 我们在这里为 updateTime 字段设置当前时间。
  • strictInsertFillstrictUpdateFill 方法:是 MyBatis-Plus 3.3.0 版本之后推荐使用的填充方法,更加安全和严格。 它们会检查字段是否存在,类型是否匹配,以及是否已经有值,避免覆盖已有值。
  • @Component:将该类注册为 Spring Bean,以便 MyBatis-Plus 可以自动发现它。

3. 配置 MyBatis-Plus

在 Spring Boot 的配置文件(例如 application.ymlapplication.properties)中,不需要显式配置 MyBatis-Plus 的自动填充功能。 只要你的填充处理器类被 Spring 管理(例如通过 @Component 注解),MyBatis-Plus 就会自动识别并使用它。 🎉

使用示例 🚀

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setName("testUser");user.setAge(25);user.setEmail("test@example.com");int result = userMapper.insert(user);System.out.println("影响行数:" + result);System.out.println("插入后的用户ID:" + user.getId());System.out.println("插入后的用户创建时间:" + user.getCreateTime());System.out.println("插入后的用户更新时间:" + user.getUpdateTime());}@Testpublic void testUpdate() {User user = userMapper.selectById(1L); // 假设ID为1的用户存在user.setName("updatedUser");int result = userMapper.updateById(user);System.out.println("影响行数:" + result);System.out.println("更新后的用户更新时间:" + user.getUpdateTime());}
}

解释:

  • testInsert 方法中,我们创建了一个 User 对象,并设置了 nameageemail 字段。 createTimeupdateTime 字段没有手动设置。
  • 执行 userMapper.insert(user) 后,MyBatis-Plus 会自动调用 MyMetaObjectHandlerinsertFill 方法,为 createTimeupdateTime 字段设置当前时间。
  • testUpdate 方法中,我们先查询出一个 User 对象,然后修改了 name 字段。 updateTime 字段没有手动设置。
  • 执行 userMapper.updateById(user) 后,MyBatis-Plus 会自动调用 MyMetaObjectHandlerupdateFill 方法,为 updateTime 字段设置当前时间。

四、注意事项 ⚠️

  • 确保你的填充处理器类被 Spring 管理(例如通过 @Component 注解)。
  • 使用 strictInsertFillstrictUpdateFill 方法可以避免覆盖已有值。
  • 如果你的字段类型不是 LocalDateTime,需要根据实际类型进行调整。
  • 如果你的字段名不是 createTimeupdateTime,需要在填充处理器中修改字段名。
  • 如果你的数据库字段类型是 TIMESTAMP,建议使用 LocalDateTimeInstant 作为 Java 类型,并配置相应的类型处理器。
  • 如果你的数据库字段类型是 DATE,建议使用 LocalDate 作为 Java 类型。

五、总结 🎉

MyBatis-Plus 的自动填充功能可以极大地简化开发,提高效率,并保证数据的一致性。 通过定义实体类字段、编写填充处理器和配置 MyBatis-Plus,可以轻松实现创建时间和更新时间字段的自动填充。 希望篇文章能够帮助你理解和使用 MyBatis-Plus 的自动填充功能。 🥳

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

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

相关文章

arduino R4 SD卡读写测试

使用买来的 st7789LCD 显示器背面就带着一个 tf 卡槽&#xff0c;可以直接连接 tf 卡。使用 Sdfat 库就可以实现对 sd 卡的读写操作。这里尝试测试 sd 卡的读写功能。 LCD 显示器的初始化 //定义LCD的对象 Adafruit_ST7789 tft Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);tf…

【武汉·4月11日】Parasoft联合光庭信息研讨会|邀您共探AI赋能新机遇

Parasoft联合光庭信息Workshop邀您共探AI赋能新机遇 AI浪潮已至&#xff0c;你准备好了吗&#xff1f; 在智能网联汽车飞速发展的今天&#xff0c;AI技术正以前所未有的速度重塑行业生态。如何把握AI机遇&#xff0c;赋能企业创新&#xff1f; 4月11日&#xff0c;自动化软件…

防火墙带宽管理

拓扑 配置 [fw]interface GigabitEthernet 0/0/0 [fw-GigabitEthernet0/0/0]service-manage all permit [fw]interface GigabitEthernet 1/0/0 [fw-GigabitEthernet1/0/0]ip address 12.0.0.1 24 [fw]interface GigabitEthernet 1/0/1 [fw-GigabitEthernet1/0/1]ip ad…

一人系统 之 为什么要做一人系统?

一人系统 之 赚钱认知篇&#xff08;下&#xff09; 本文 2119个字&#xff0c;大概阅读时间 16分钟。 在上一篇文章中&#xff0c;主要讲了以下三个内容&#xff1a; 什么是好的工作&#xff1f;时薪高&#xff0c;并且有能力提升&#xff0c;而且最终可以独立创业的工作&…

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…

Java安全-类的动态加载

类的加载过程 先在方法区找class信息&#xff0c;有的话直接调用&#xff0c;没有的话则使用类加载器加载到方法区(静态成员放在静态区&#xff0c;非静态成功放在非静态区)&#xff0c;静态代码块在类加载时自动执行代码&#xff0c;非静态的不执行;先父类后子类&#xff0c;…

ROS多机通信功能包——Multibotnet

引言 这是之前看到一位大佬做的集群通信中间件&#xff0c;突发奇想&#xff0c;自己也来做一个&#xff0c;实现更多的功能、更清楚的架构和性能更加高效的ROS多机通信的功能包 链接&#xff1a;https://blog.csdn.net/benchuspx/article/details/128576723 Multibotnet Mu…

C++:背包问题习题

1. 货币系统 1371. 货币系统 - AcWing题库 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V 种货币凑出 N 元钱&#xff0c;请问共有多少种不同的…

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器&#xff0c;内置负载均衡&#xff0c;支持应用自动重启&#xff0c;常用于生产环境运行 node.js 应用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2发布最新版本v6.0.5&#xff0c;这…

【数据分享】2014-2024年我国各城市逐年空气质量指数(AQI)数据

空气质量指数&#xff08;AQI&#xff09;是一个衡量空气污染程度的综合指标&#xff0c;它并不直接表示具体污染物的浓度值&#xff0c;而是基于多种污染物的浓度进行的综合评价&#xff0c;具体基于六种主要污染物的浓度&#xff1a;PM2.5、PM10、SO₂、NO₂、O₃和CO。AQI是…

【C++】深入理解list迭代器的设计与实现

深入理解list迭代器的设计与实现 引言1、链表基础结构2、链表迭代器的封装2.1 初步封装迭代器类2.2 引入const迭代器2.2.1 参考STL源代码2.2.2 完善迭代器 3、迭代器实现机制结语 引言 在STL容器中&#xff0c;list作为经典的双向链表容器&#xff0c;其迭代器设计体现了C模板编…

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

OpenCV中距离公式

一、各类距离公式总结 常见距离公式 欧氏距离&#xff1a; 曼哈顿距离&#xff08;L1&#xff09;‌&#xff1a; 切比雪夫距离&#xff08;Chessboard&#xff09;‌&#xff1a; 1、点与点距离(欧氏距离) ‌二维空间‌ 设两点坐标为 P1(x1,y1)、P2(x2,y2)&#xff0c;其距离…

Vue.js 模板语法全解析:从基础到实战应用

引言 在 Vue.js 的开发体系中&#xff0c;模板语法是构建用户界面的核心要素&#xff0c;它让开发者能够高效地将数据与 DOM 进行绑定&#xff0c;实现动态交互效果。通过对《Vue.js 快速入门实战》中关于 Vue 项目部署章节&#xff08;实际围绕 Vue 模板语法展开&#xff09;…

论文笔记(七十三)Gemini Robotics: Bringing AI into the Physical World

Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理问答&#xff08;ERQA&#xff09;基准测试2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零样本和少样本机器人控制 3. 使用 Gemini Robotics 执行机器人动作3…

centos7搭建postgresql12主从

主从搭建 192.168.159.101 node1 主库&#xff08;读写&#xff09; 192.168.159.102 node2 备库&#xff08;只读&#xff09; 两台机器首先安装postgrsql 主库 postgres用户操作&#xff1a; 修改postgresql.conf # 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外…

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");

vulnhub靶场之【hack-me-please靶机】

前言 靶机&#xff1a;billu_b0x2靶机&#xff0c;IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用桥接网卡模式 文章涉及的靶机及工具&#xff0c;都可以自行访问官网或者项目地址进行获取&…

机器学习——KNN模型评价

一、主要函数 sklearn.metrics.accuracy_score() 是 scikit-learn 中用于计算分类模型准确率的函数&#xff0c;适用于评估分类任务的整体性能。 1、核心功能 作用&#xff1a;计算模型预测的准确率&#xff0c;即正确分类的样本数占总样本数的比例。公式&#xff1a;Accurac…

美国国家数据浮标中心(NDBC)

No.大剑师精品GIS教程推荐0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入门教程】 - 【源代码示例 300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3MapboxGL【入门教程】 - 【源代码图文示例150】 4Cesium 【入门教程】…