MybatisPlus官网: MyBatis-Plus
自动填充功能
如create_time,update_time,一般所有表都包含这两个字段
这种的字段需要自动生成值
两种方法:
方法一:数据库级别(工作中不常使用,你没法修改数据库):
- 在标中添加相应字段create_time,update_time
- 在测试修改方法,先在pojo实体类中添加相应属性
测试时:你并没有设置时间,数据库中的时间自动更新private Date createTime; private Date updateTime;
方法二:代码级别:
- 删除数据库表的自动更新
- 在pojo类的属性中添加自动
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.InSert_UPDATE) private Date updateTime;
- 编写处理器来处理这些注解
@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`方法