• 自动填充功能

    自动填充功能

    示例工程:

    ? 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. }