# MyBatis-Plus 中的 MetaObjectHandler 接口详解 ## 背景 在日常开发中,我们经常需要处理一些公共字段的自动填充,例如在每次插入或更新数据时自动设置创建时间和更新时间。这些重复性的工作可以通过 MyBatis-Plus 提供的 `MetaObjectHandler` 接口来简化,实现公共字段的自动填充,提高开发效率并减少代码冗余。 ## 使用方法 ### 1. 实体类注解配置 首先,我们需要在实体类中使用 `@TableField` 注解标记出需要自动填充的字段,并指定对应的填充策略: ```java import com.baomidou.mybatisplus.annotation.*; import java.util.Date; @TableName("your_table") public class YourEntity { @TableId private Long id; private String name; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; // 省略 getter 和 setter 方法 } ``` ### 2. 实现 MetaObjectHandler 接口 接下来,我们实现 `MetaObjectHandler` 接口,并定义插入和更新时字段的自动填充逻辑: ```java import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import java.util.Date; public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 插入操作自动填充 createTime } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 更新操作自动填充 updateTime } } ``` ### 3. 配置 MyBatis-Plus 最后,在 MyBatis-Plus 的配置类中注册 `MyMetaObjectHandler` 实例,并配置插件: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; @Configuration public class MybatisPlusConfig { @Bean public MyMetaObjectHandler myMetaObjectHandler() { return new MyMetaObjectHandler(); } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 可以添加其他的拦截器 return interceptor; } } ``` 现在,每当执行插入或更新操作时,MyBatis-Plus 会自动调用 `MyMetaObjectHandler` 实现的方法来填充 `createTime` 和 `updateTime` 字段。 ## 总结 `MetaObjectHandler` 是 MyBatis-Plus 提供的一个强大的接口,用于处理实体类公共字段的自动填充。通过实现此接口,我们可以极大地简化对于创建时间、更新时间等字段的处理逻辑,使得代码更加简洁,并且保持了一致性和可维护性。这种自动填充功能是 MyBatis-Plus 的一大特色,能够有效地提升开发效率。在实践中,我们可以根据实际的业务需求来自定义填充策略,使其更贴合项目的需求。