mybatisplus自动填充字段源码
时间: 2025-01-15 08:10:35 浏览: 55
### 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**: 若使用代码生成工具创建实体类的话,这里控制着是否为某些特殊字段添加必要的注释标签以便支持自动化填充行为。
阅读全文
相关推荐


















