Mybatis-Plus之自动填充(数据库表中更新,创建时间)
程序员文章站
2024-03-23 20:13:52
...
- 创建时间,修改时间,这些操作一遍都是自动化完成的,我们不希望手动更新。
- 阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上,而且需要自动化。
方式一:数据库级别:
- 但是最好不要这样做,因为如果我们工作了,最好不要修改数据库
- 每次向表中插入数据时,不需要插入create_time这一列的值,因为它有默认值,它会自动填充的。
- 再次测试插入方法时:
- 为什么只有最后一条语句实现插入时间?
因为我们在实体类中没有添加创建和更新时间字段。
方式二:代码级别:
- 删除数据库的默认值和更新操作:
就是把时间字段的设置都取消掉,只留时间字段。
- 把之前写的取消掉,在实体类属性添加注解:
- 查看TableField的源码发现:
- 编写处理器处理这个注解:
- 官网上填写如下:
@Slf4j@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
//this.setFieldValByName("operator", "Jerry", metaObject);
//this.setInsertFieldValByName("operator", "Jerry", metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
//this.setFieldValByName("operator", "Tom", metaObject);
//this.setUpdateFieldValByName("operator", "Tom", metaObject);
}}
- 再次执行插入测试:
上一篇: 排序总结(不断更新)
下一篇: mybatis-plus之CRUD