Mybatis-Plus实现自动填充功能

it2023-10-29  71

官网介绍

需求背景: 数据库表的创建时间、修改时间操作一般都是自动化完成的,不建议手动更新!

方式一:数据库级别(工作中一般不让改数据库) 所以简单了解一下就行

1、在表中新增字段 create_time、update_time

​ 给字段设置默认属性:CURRENT_TIMESTAMP

2、再次测试插入方法,需要先同步一下实体类

private Date createTime; private Date updateTime;

3、再次查看结果即可

方式二:代码级别

1、实体类字段属性需要增加注解 标记为填充字段

@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;

2、编写一个处理器来处理这个注解

@Slf4j @Component //切记不要忘了把处理器加到IOC容器中 public class MyMetaObjectHandler implements MetaObjectHandler { //插入时的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); // 传输的数据 column字段名, 时间 this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用) // 或者 this.strictUpdateFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐) // 或者 this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug) } //更新时的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ...."); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐) // 或者 this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐) // 或者 this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug) } }

4、测试插入、观察结果

至此,实现完毕

注意事项:(官网提示)

填充原理是直接给entity的属性设置值!!!注解则是指定该属性在对应情况下必有值,如果无值则入库会是nullMetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法不需要根据任何来区分可以使用父类的fillStrategy方法
最新回复(0)