Mybatisp-plus中,为啥我的入参没有创建日期,表里创建日期必填,但是执行insert之后会有创建日期
时间: 2025-06-29 19:06:14 浏览: 6
### MyBatis-Plus 实现自动字段填充
MyBatis-Plus 提供了一种便捷的数据填充机制,允许在插入和更新操作之前自动为实体对象中的某些字段赋值。这种特性特别适用于那些不需要手动输入但在业务逻辑上必需的字段,比如创建时间和修改时间。
当表结构中存在 `create_time` 字段并设为必填项时,即便应用程序层未显式传递此参数,MyBatis-Plus 依然能够确保该字段被正确初始化[^3]。这是因为开发者可以通过配置全局处理器或局部处理器的方式设定默认行为:
#### 配置全局处理器
为了使所有符合条件的实体都能享受到这一便利功能,通常会定义一个实现了 `MetaObjectHandler` 接口的类作为全局处理器,并重写其中的方法来指定具体要处理哪些字段以及它们应该获得什么样的初始值。
```java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
}
```
上述代码片段展示了如何利用 `strictInsertFill()` 方法针对新增记录设置固定的创建时间为当前时刻;而对于已有记录,则可通过调用 `strictUpdateFill()` 来保持每次变更后的最新状态。
#### 修改实体类属性
除了注册全局处理器外,还需要调整对应的 JavaBean 类型以支持元数据注入。这一般意味着要在相应的 getter/setter 对应位置标注合适的注解,从而告知框架哪些成员变量参与到了自动化流程之中。
```java
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
```
这里使用了 `@TableField` 注解配合枚举常量 `FieldFill` 来标记目标属性应当在哪种情况下接受来自外部源提供的预设值[^5]。
一旦完成了以上两步准备工作之后,无论前端提交了多少信息给后端接口,只要涉及到涉及带有特殊标志位的对象实例化过程,系统内部就会按照既定策略完成必要的补充动作——即保证每条新加入的数据都携带有一个合理的起始时间节点。
阅读全文
相关推荐


















