md醉了 2022-09-23 00:07 采纳率: 0%
浏览 30

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

  • 写回答

1条回答 默认 最新

  • weixin_43405544 2023-04-16 09:31
    关注

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

    第一种方法使用的是 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 注解来指定映射关系。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月23日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助