遇到的问题
练习项目时遇到create_time和update_time数据表字段需要填充时想到每次都要手写代码有点繁琐而且直觉告诉我肯定有办法自动填充。通过查阅相关资料,最终也是成功达成目标。
解决步骤
1.创建自定义类DateAutoFillHandler实现MetaObjectHandler接口
@Component
public class DateAutoFillHandler implements MetaObjectHandler {/*将来实体类字段添加@TableField(fill = FieldFill.INSERT)注解后会自动调用*/@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());this.strictInsertFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now());}/*将来实体类字段添加@TableField(fill = FieldFill.UPDATE)注解后会自动调用*/@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now());}
}
注意:
- 填充处理器DateAutoFillHandler在 Spring Boot 中需要声明 @Component 或 @Bean 注入
- strictInsertFill 和 strictUpdateFill 方法第二个参数写的是实体类里的属性名,不是对应数据库字段名。
2.使用 @TableField 注解标记实体类中的哪些字段需要填充
FieldFill 是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值:
- DEFAULT:默认不处理
- INSERT:插入填充字段
- UPDATE:更新填充字段
- INSERT_UPDATE:插入和更新填充字段
至此我们就完成了日期自动注入功能了
参考文章