关于mybatis映射结果 java.lang.IllegalArgumentException: argument type mismatch 的错误记录及解决
完整报错如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.jeoho.module.appro.domain.ApproUser with invalid types (SysUser) or values (1636192244241887234). Cause: java.lang.IllegalArgumentException: argument type mismatch
approUser是SysUser的中间对象,将数据库表sys_user中的数据查出映射到approUser对象中
查询报如上错误
原因
写了一个有参构造,而没把无参构造补上,映射的时候首先会创建对象,因此出现异常
解决
补上无参构造函数
如果一个 Java 类没有定义无参构造方法,那么在使用该类时,可能会出现以下几种情况:
1.如果该类没有定义任何构造方法,则编译器会自动为其生成一个默认的无参构造方法,这个构造方法会调用父类的无参构造方法。因此,即使没有显式定义无参构造方法,该类也可以正常实例化和使用。
2.如果该类定义了其他有参构造方法,但没有定义无参构造方法,那么在实例化该类的时候,如果没有指定参数,就会编译错误。因为在创建对象的时候,Java 编译器会先去查找是否有无参构造方法可用,如果没有,就会抛出编译错误。
3.如果该类被其他类继承,而子类中没有显式调用父类的构造方法或者调用了父类的构造方法但是没有匹配的构造方法可用,则在编译或者运行时会报错。
因此,一般来说,建议在定义 Java 类时,无论是否需要,都显式地定义一个无参构造方法,以保证类的实例化和继承的正常使用。如果需要定义其他的构造方法,可以在其中调用无参构造方法来初始化类的状态。
基本功还是很重要,不然碰到这种bug还一头雾水。。。