记录:解决with invalid types() or values()...问题【亲测有效】

记录:解决with invalid types() or values()...问题【亲测有效】_第1张图片

‍作者:bug菌
✏️博客: CSDN、 掘金、 infoQ、 51CTO等
简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️ 温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟

        嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

        如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章 点亮,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连( 收藏+关注+留言)就是对bug菌写文道路上最好的鼓励与支持。时光不弃‍♀️,创作不停,加油☘️

一、前言

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

二、问题描述

        原报错截图,大家情况,一眼能看来是什么问题吗?

重点报错code如下: 

exceptionInfo:"nested exception is org.apache.ibatis.reflection.ReflectionException:Error instantiating class com.example.gyl.entity.PartSupplierResource with invalid types(SaveModel,String) or values(123D1D21,212D1DF2D). Cause: java.lang.IllegalArgumentException:argument type mismatch"

        见状分析error报错这句才是重点,java.lang.IllegalArgumentException:argument type mismatch,那么你就成功被带偏了定位思路,然后去找自己与数据库字段映射的时候,参数类型是否不匹配,检查自己的下数据类型检查下来其实毫无问题,怀疑人生,于是一股脑的就去核对自己的字段类型是否与实体映射字段类型是否一致,乃至重新生成一遍。结果还是无果。

        所以当你遇到报错,千万不是只在一个点上杠一根筋,这也是见我同事事后过来找我跟我分享的这个问题,其实当我第一眼看到这个报错,我也是第一时间觉得是他写的映射字段类型有问题, 比如数据库是Date类型,而你入库时又是String类型,这肯定是类型不同导致插入报错了。

        重点其实就在这:with invalid types(SaveModel,String) or values(123D1D21,212D1DF2D).

        针对这个报错,我同事只是在PartSupplierResource实体类中忘了加无参构造而已。但针对该报错,还有可能是实体类Bean中的get/set方法与成员变量不一导致。

三、解决方案

        在你的实体类Bean中加入无参构造函数即可。或者核对你实体类Bean中的get/set方法与成员变量是否一致。

public PartSupplierResource(){
    //无参构造函数
}

拓展:  

为什么实体类中写了有参构造函数不写无参构造函数就会报错呢? 

答:因为Mybatis框架会调用这个默认构造方法来构造实例对象。

        即Class类的new Instance()方法,这个方法就是通过调用默认构造方法来创建实例对象的.如果实体类中没有提供任何构造方法虚拟机会自动提供默认构造方法(无参构造器),但是如果你写了其他有参数的构造方法的话,虚拟机就不再为你提供默认构造方法,这时就必须手动把无参构造器补上,否则new xxx()或者映射实体类是会报错的。

        所以默认的构造方法不是必须的,只在有多个构造方法时才是必须的,这里“必须”指的是“必须手动写出来”。
        当查询的时候返回的实体类是一个对象实例,是Mybatis动态通过反射生成的Class.forName(“className”).newInstance();需要对应的类提供一个无参构造函数,所以当实体类没有自定义构造函数,这时候其实就不用关心它的缘由了。

        这可能很多小伙伴会忽略的一个小细节,虽然没多大的技术难点,但是报错起码第一眼你应该要反应过来!基础玩扎实咯,加油。

... ...

        ok,以上就是我这期的全部内容啦,如果还想学习更多,可以看看我的往期热文推荐哦,不积跬步,无以至千里; 不积小流,无以成江海,一口吃不成一个大胖子,加油!咱们下期拜拜~~

四、往期推荐

  • springboot系列(一):如何创建springboot项目及启动
  • springboot系列(二):yaml、properties两配置文件介绍及使用
  • springboot系列(三):多环境切换,实例演示
  • springboot系列(四):stater入门
  • springboot系列(五):史上最最最全springboot常用注解
  • springboot系列(六):mysql配置及数据库查询
  • springboot系列(七):如何通过mybatis-plus实现接口增删改查
  • springboot系列(八):mybatis-plus之条件构造器使用手册
  • springboot系列(九):mybatis-plus之如何自定义sql
  • springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
  • springboot系列(十一):实现多数据源配置,开箱即用
  • springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
  • springboot系列(十三):如何实现发送普通邮件?你一定得会
  • springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
  • springboot系列(十五):如何实现静态邮件模板发送?你一定得会
  • springboot系列(十六):如何实现发送邮件提醒,附完整源码
  • springboot系列(十七):集成在线接口文档Swagger2
  • springboot系列(十八):如何Windows安装redis?你玩过么
  • springboot系列(十九):如何集成redis?不会我教你
  • springboot系列(二十):如何通过redis实现手机号验证码功能 
  • ... ...

文末

        安利一个超牛超硬核的专栏《springboot零基础入门教学》,此专栏包含数个完整项目从零到一的搭建,以及对SpringBoot入门程序原理剖析,在会用的基础上剖析源码加深理解并拓展知识点.希望能帮助到更多小伙伴们。

        我是bug菌,一名想走出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!

记录:解决with invalid types() or values()...问题【亲测有效】_第2张图片

你可能感兴趣的:(mybatis,spring,boot,java)