MybatisPlus字段自动填充工具类

本文介绍了如何在MybatisPlus中实现字段自动填充,包括创建表、定义实体对象的注解以及编写handler工具类,详细阐述了FieldFill.INSERT和FieldFill.INSERT_UPDATE的使用场景。
实现步骤
  1. 创建表
  2. 创建实体并设置注解
  3. 创建 handler 工具类
创建表
CREATE TABLE `ums_member` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) DEFAULT NULL,
  `password` varchar(64) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '更新时间',
  `status</
### MyBatisPlus 自动填充字段源码实现 MyBatisPlus自动填充功能主要通过 `MetaObject` 和处理器机制来完成。具体来说,在执行插入或更新操作前,框架会调用相应的处理器对指定字段进行赋值。 #### 处理器注册与配置 在项目启动阶段,MyBatisPlus 会扫描带有特定注解的实体类属性,并将其映射到对应的元对象处理器中。对于自动填充特性而言,这涉及到 `FieldFill` 枚举类型的定义[^1]: ```java public enum FieldFill { DEFAULT, INSERT, UPDATE, INSERT_UPDATE; } ``` 当开发者在 POJO 类中的某个字段上标注了类似于下面这样的注解时, ```java @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Integer version; ``` 这些信息会被记录下来并用于后续的操作判断[^3]。 #### 填充逻辑触发点 实际的数据填充发生在 SQL 执行之前,即准备参数的过程中。此时,MyBatisPlus 利用了 MyBatis 提供的拦截器接口——`Interceptor` 来介入这一过程。特别地,有一个名为 `MetaObjectHandler` 接口负责具体的填充值设置工作[^2]。 以下是简化版的核心流程描述: - 如果目标表存在标记了 `@TableField(fill)` 注解的列,则激活对应的行为; - 调用实现了 `MetaObjectHandler` 接口的对象方法(如 `setInsertScript()` / `setUpdateScript()`),从而向待写入数据库的新纪录注入预设的时间戳或其他默认值[^4]; 因此,要查看完整的自动填充实现细节,可以关注以下几个关键文件路径下的代码片段: - **mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/method/AbstractMethod.java**: 定义了一些通用的方法模板,其中包含了如何处理不同场景下(比如 insert/update)的字段填充。 - **mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/autoconfigure/MetaObjectHandlerRegister.java**: 这里涉及到了 `MetaObjectHandler` 的实例化以及其生命周期管理的相关逻辑。 - **mybatis-plus-generator/src/main/resources/templates/entity.java.vm**: 若使用代码生成工具创建实体类的话,这里控制着是否为某些特殊字段添加必要的注释标签以便支持自动填充行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅帅的猪头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值