报错信息类似如下:
org.apache.ibatis.reflection.ReflectionException: Error instantiating class....
java.lang.NoSuchMethodException: cn.pojo.Rules.<init>(......
原因:
没有找到对应构造方法,导致查询到的数据转换成pojo时报错。
解决方法:
仔细检查构造方法,核对构造方法的参数类型是否与查询出来的数据的类型一致;
本人碰到的情况就是,有参构造方法的参数数量跟查询出来的数据的字段是对应无误的,但是无法映射。最后仔细检查,发现是自动生成的oracle的mapper中, 数值类型的使用的是Long类型(网上查了下,数值字段长度大于等于11,通过Mybatis generator生成的mapper对应数值字段就会是Long类型), 而pojo是通过mysql数据库映射,使用generator自动生成的(该项目支持多种数据库),构造方法中的数值参数类型是Integer,参数类型不一致导致的映射错误。
pojo中:
mysql的mapper.xml中:
oracle的mapper.xml中: