mybatisplus自动填充生效的问题

我在实现瑞吉外卖这个项目的时候,对数据库的create_time,create_user,update_time,update_user进行自动填充,然后发现使用
this.strictInsertFill(metaObject, "create_time", LocalDateTime.class, LocalDateTime.now());这个方法不生效,
然后使用
metaObject.setValue("createTime", LocalDateTime.now());这种方法就生效了,
请问是为什么,这两种有什么区别嘛。

如下图:

img

img

根据你提供的信息,我可以初步判断这两种方法使用的是不同的第三方库。

第一种方法使用的是 MyBatis-Plus 的方法 this.strictInsertFill(),而第二种方法使用的是 MyBatis 的方法 metaObject.setValue()。这两种方法虽然都是用来设置数据库字段的默认值,但是实现方式略有不同。

this.strictInsertFill() 方法是 MyBatis-Plus 提供的自动填充功能,它是在 MyBatis 原有的基础上进行的扩展,主要是通过在 SqlInjector 中注册自定义的插入方法,实现对数据库字段的自动填充。在使用 this.strictInsertFill() 方法时,需要在实体类中定义对应的字段,并通过 @TableField 注解指定填充的字段名和填充方式(如填充的值类型、填充的值等)。

而 metaObject.setValue() 方法则是 MyBatis 原生的属性赋值方法,它通过 MetaObject 对象获取实体类的属性,并通过 setValue 方法设置属性值。在使用 metaObject.setValue() 方法时,需要手动指定属性名,并传入需要赋的值。

可能由于 MyBatis-Plus 的版本或配置问题,导致 this.strictInsertFill() 方法无法生效。而 metaObject.setValue() 方法是 MyBatis 原生的属性赋值方法,不会受到 MyBatis-Plus 的影响,所以能够生效。

需要注意的是,在使用 metaObject.setValue() 方法时,需要保证实体类中有对应的属性,并且属性名和数据库字段名一致。如果实体类中没有对应的属性,或者属性名与数据库字段名不一致,则需要使用 MyBatis-Plus 提供的 @TableField 注解来指定映射关系。