当前位置: 首页 > news >正文

MyBatis-Plus中FieldFill理解与应用

FieldFill 是 MyBatis-Plus 框架中用于字段自动填充功能的一个枚举类。它定义了字段在不同场景下的自动填充策略。具体来说,FieldFill 枚举有以下几个值:

  1. DEFAULT:默认值,表示该字段不会进行自动填充。
  2. INSERT:插入记录时自动填充字段。
  3. UPDATE:更新记录时自动填充字段。
  4. INSERT_UPDATE:插入和更新记录时都自动填充字段。

使用场景

1. 插入记录时自动填充

当你希望某个字段在插入记录时自动填充,可以将该字段的 fieldFill 属性设置为 FieldFill.INSERT。例如,创建时间字段通常在插入记录时自动填充:

@TableField(fill = FieldFill.INSERT)
private Date createTime;
2. 更新记录时自动填充

当你希望某个字段在更新记录时自动填充,可以将该字段的 fieldFill 属性设置为 FieldFill.UPDATE。例如,更新时间字段通常在更新记录时自动填充:

@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
3. 插入和更新记录时都自动填充

如果你希望某个字段在插入和更新记录时都自动填充,可以将该字段的 fieldFill 属性设置为 FieldFill.INSERT_UPDATE。例如,某些版本控制字段可能需要在插入和更新时都自动填充:

@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer version;

自动填充处理器

为了实现自动填充功能,你需要编写一个 MetaObjectHandler 类,实现 MetaObjectHandler 接口,并在其中定义具体的填充逻辑。例如:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFilled(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.now()); // 起始版本 3.3.0(推荐)this.strictInsertFill(metaObject, "updateTime", LocalDateTime.now()); // 起始版本 3.3.0(推荐)}@Overridepublic void updateFilled(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.now()); // 起始版本 3.3.0(推荐)}
}

示例

假设你有一个 User 实体类,其中包含 createTimeupdateTime 字段:

@Data
public class User {private Long id;private String name;@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.UPDATE)private LocalDateTime updateTime;
}

代码解释

回到最初的代码:

methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));

这行代码的意思是:在批量插入记录时,只插入那些 getFieldFill 属性不是 FieldFill.UPDATE 的字段。也就是说,更新时间字段(如 updateTime)不会被插入,因为它们通常是在更新记录时自动填充的。


http://www.mrgr.cn/news/55782.html

相关文章:

  • 【MySQL数据库】MySQL高级语句(SQL语句进阶版)
  • 如何利用 Python抓取网页数据 其他方式抓取网页数据列举
  • 如何使用Git推送本地搭建的仓库以及远程克隆的仓库
  • JRT怎么从IRIS切换到PostGreSql库
  • 深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)
  • python绝对值怎么表示
  • 编程题 7-22 龟兔赛跑【PAT】
  • C++游戏开发:从基础到进阶
  • JavaWeb——Maven(6/8):依赖管理-依赖传递 (介绍、直接依赖与间接依赖、演示、排除依赖)
  • Java 分页实战详解
  • 保研推荐信模板
  • Unity地面检测、跳跃
  • 低功耗4G模组的小秘密:RSA算法示例驾到,通通闪开...
  • 一分钟运行DBT入门示例项目(Jaffle Shop)
  • 新的类Rufus应用可带来简单的Windows 11 24H2安装旁路
  • 【07】z检验
  • Redis在实践的关键点
  • autMan框架对接飞书机器人
  • Golang | Leetcode Golang题解之第500题键盘行
  • Flutter Container容器组件实战案例
  • 精选录屏软件下载工具:记录精彩每一刻
  • 基于leaflet-polygon.fillPattern的面状对象图片填充实现
  • SQL CHECK 约束:确保数据完整性的关键
  • 【星闪技术】WS63E模块实时显示当前环境温湿度
  • ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)
  • AI学习指南深度学习篇-对比学习(Contrastive Learning)简介