自动填充功能

示例工程:

👉 mybatis-plus-sample-auto-fill-metainfo自动填充功能 - 图1

  • 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

  • 注解填充字段 @TableField(.. fill = FieldFill.INSERT) 生成器策略部分也可以配置!

  1. public class User {
  2. // 注意!这里需要标记为填充字段
  3. @TableField(.. fill = FieldFill.INSERT)
  4. private String fillField;
  5. ....
  6. }
  • 自定义实现类 MyMetaObjectHandler
  1. @Component
  2. public class MyMetaObjectHandler implements MetaObjectHandler {
  3. private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
  4. @Override
  5. public void insertFill(MetaObject metaObject) {
  6. LOGGER.info("start insert fill ....");
  7. this.setFieldValByName("operator", "Jerry", metaObject);//版本号3.0.6以及之前的版本
  8. //this.setInsertFieldValByName("operator", "Jerry", metaObject);//@since 快照:3.0.7.2-SNAPSHOT, @since 正式版暂未发布3.0.7
  9. }
  10. @Override
  11. public void updateFill(MetaObject metaObject) {
  12. LOGGER.info("start update fill ....");
  13. this.setFieldValByName("operator", "Tom", metaObject);
  14. //this.setUpdateFieldValByName("operator", "Tom", metaObject);//@since 快照:3.0.7.2-SNAPSHOT, @since 正式版暂未发布3.0.7
  15. }
  16. }

注意事项:

  • 字段必须声明TableField注解,属性fill选择对应策略,该申明告知 Mybatis-Plus 需要预留注入 SQL 字段
  • 填充处理器MyMetaObjectHandler 在 Spring Boot 中需要声明@Component 注入
  • 必须使用父类的setFieldValByName()或者setInsertFieldValByName/setUpdateFieldValByName方法,否则不会根据注解FieldFill.xxx来区分
  1. public enum FieldFill {
  2. /**
  3. * 默认不处理
  4. */
  5. DEFAULT,
  6. /**
  7. * 插入填充字段
  8. */
  9. INSERT,
  10. /**
  11. * 更新填充字段
  12. */
  13. UPDATE,
  14. /**
  15. * 插入和更新填充字段
  16. */
  17. INSERT_UPDATE
  18. }