当前使用版本(必填,否则不予处理)

3.3.0

该问题是如何引起的?(确定最新版也有问题再提!!!)

个人debug查看了堆栈信息,首先DefaultResultSetHandler类的方法createResultObject中shouldApplyAutomaticMappings(resultMap, false)成立, 在DefaultResultSetHandler类的方法createByConstructorSignature里,resultType.getDeclaredConstructors()获取的构造器其实是当前类型的构造器,但我在项目中使用了BaseModel用来继承,BaseModel中有id,create_time,update_time三个字段。子类中没有,此处获取的构造器顺序是跟父类无关的

问题最终定位在这里: 方法:createUsingConstructor 错误代码如下: for (int i = 0; i < constructor.getParameterTypes().length; i++) { Class<?> parameterType = constructor.getParameterTypes()[i]; String columnName = rsw.getColumnNames().get(i); 这里constructor.getParameterTypes().length和rsw.getColumnNames()的长度并不匹配,因为构造器的类型列表与不一致rsw.getColumnNames()类型,这就导致next参数,被处理时其实是获取到next+1的参数类型的处理器来处理的。

重现步骤(如果有就写完整)

1、建一个BaseModel类,里面包含id,createTime,updateTime,变量为protected 2、根据数据库表来建立一个实体类,建立几个类型不一致的字段,比如String,Long,Boolean,LocalDateTime若干,正常使用page方法。结果会报类型转换错误。

报错信息

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'employee_status' from result set. Cause: java.lang.NumberFormatException: For input string: "DISABLED"

Comment From: miemieYaho

返回值封装是mybatis的事,去找它