文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatisPlus自动化填充的坑怎么解决

2023-07-05 19:03

关注

本篇内容主要讲解“MyBatisPlus自动化填充的坑怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MyBatisPlus自动化填充的坑怎么解决”吧!

问题再现

在开发的过程中,使用了MyBatis-Plus开发插件,根据表信息自动生成了表的实体类,然后又根据MyBatis-Plus的官方文档,添加了注解及自定义实现类,然后发现运行起来时间数据没有插入。

情况如下图所示:

MyBatisPlus自动化填充的坑怎么解决

MyBatisPlus自动化填充的坑怎么解决

MyBatisPlus自动化填充的坑怎么解决

问题分析与源码原理分析

分析打印的SQL日志,发现更新时已经添加update_time字段,故排除实体类的注解问题。

转而分析MyMetaObjectHandler自定义实现类,经过对比发现,它其中使用的LocalDateTime类型,而使用插件生成则会把Mysql数据库里DateTime类型自动生成为Date类型。

猜测问题就是时间类型不一样导致。然后打断点进入MyMetaObjectHandler方法,对MyBatis-Plus源码进行分析:

(1)实际填充方法如下

    default MetaObjectHandler strictFill(boolean insertFill, TableInfo tableInfo, MetaObject metaObject, List<StrictFill<?, ?>> strictFills) {        if (insertFill && tableInfo.isWithInsertFill() || !insertFill && tableInfo.isWithUpdateFill()) {            strictFills.forEach((i) -> {                String fieldName = i.getFieldName();                Class<?> fieldType = i.getFieldType();                tableInfo.getFieldList().stream().filter((j) -> {                    return j.getProperty().equals(fieldName) && fieldType.equals(j.getPropertyType()) && (insertFill && j.isWithInsertFill() || !insertFill && j.isWithUpdateFill());                }).findFirst().ifPresent((j) -> {                    this.strictFillStrategy(metaObject, fieldName, i.getFieldVal());                });            });        }        return this;    }

(2)定位匹配规则代码

return j.getProperty().equals(fieldName) && fieldType.equals(j.getPropertyType()) && (insertFill && j.isWithInsertFill() || !insertFill && j.isWithUpdateFill());

可以将其拆分成三部分,分别是

//判断MyMetaObjectHandler中名称是否和更新数据的名称相同j.getProperty().equals(fieldName)//判断自MyMetaObjectHandler中类型是否和更新数据的类型相同fieldType.equals(j.getPropertyType())//判断字段insert及update填充的符合情况(insertFill && j.isWithInsertFill() || !insertFill && j.isWithUpdateFill())

(3)计算器参数对比

MyBatisPlus自动化填充的坑怎么解决

在此就能发现问题,propertyType中的值为class java.util.Date,而fieldType中的值为class java.time.LocalDateTime,类型不匹配导致填充失败。

问题解决方法

将自动生成实体类的时间类型改成了LocalDateTime,问题便得到了解决。

MyBatisPlus自动化填充的坑怎么解决

MyBatisPlus自动化填充的坑怎么解决

到此,相信大家对“MyBatisPlus自动化填充的坑怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯