天天看点

MybatisPlus学习笔记------自动填充功能

MybatisPlus官网: MyBatis-Plus

自动填充功能

如create_time,update_time,一般所有表都包含这两个字段

这种的字段需要自动生成值

两种方法:

方法一:数据库级别(工作中不常使用,你没法修改数据库):
  1. 在标中添加相应字段create_time,update_time
    MybatisPlus学习笔记------自动填充功能
  2. 在测试修改方法,先在pojo实体类中添加相应属性
    private Date createTime;
     private Date updateTime;
               
    测试时:你并没有设置时间,数据库中的时间自动更新
    MybatisPlus学习笔记------自动填充功能
方法二:代码级别:
  1. 删除数据库表的自动更新
  2. 在pojo类的属性中添加自动
    @TableField(fill = FieldFill.INSERT)
        private Date createTime;
        @TableField(fill = FieldFill.InSert_UPDATE)
        private Date updateTime;
               
  3. 编写处理器来处理这些注解
    @Component
    @Slf4j
    public class MyMetaObjectHandler implements MetaObjectHandler {
        //插入时填充策略
        @Override
        public void insertFill(MetaObject metaObject) {
            log.info("start insert fill---");
            //使用两种方法都行
            this.strictInsertFill(metaObject,"createTime", Date.class,new Date());
            this.strictInsertFill(metaObject,"updateTime", Date.class,new Date());
    //          this.fillStrategy(metaObject,"createTime",new Date());
    //			下面已过时
    //	    	this.setFieldValByName("createTime", new Date(),metaObject);
    //  	    this.setFieldValByName("updateTime", new Date(),metaObject);
        }
    //    更新时填充策略
        @Override
        public void updateFill(MetaObject metaObject) {
            log.info("start update fill---");
            this.strictUpdateFill(metaObject,"updateTime",Date.class,new Date());
    //        this.fillStrategy(metaObject,"updateTime",new Date());
    //			下面已过时
    //        this.setFieldValByName("updateTime", new Date(),metaObject);
        }
    }
    
               
注意事项:

   - 字段必须声明`TableField`注解,属性`fill`选择对应策略,该声明告知`Mybatis-Plus`需要预留注入`SQL`字段
   - 填充处理器`MyMetaObjectHandler`在 Spring Boot 中需要声明`@Component`或`@Bean`注入
   - 要想根据注解`FieldFill.xxx`和`字段名`以及`字段类型`来区分必须使用父类的`strictInsertFill`或者`strictUpdateFill`方法
   - 不需要根据任何来区分可以使用父类的`fillStrategy`方法

           

继续阅读