1.定义了一个内部类
class Outer{
private String name;
class Inner{
private Integer min;
private Integer max;
}
getter...
setter...
}
2.mybatis实现了对应内部类的resultMap
<resultMap id="range" type="com.cheng.test.Outer$Inner">
<result column="min_id" property="min" jdbcType="INTEGER" />
<result column="max_id" property="max" jdbcType="INTEGER" />
</resultMap>
3.最后的结果报异常:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.cheng.test.Outer$Inner matching [java.lang.Integer, java.lang.Integer]
4.报的异常是说我缺少构造函数,但是定义类内部类的构造函数也没用.Outer类里,写Inner构造函数会提示错误.请问是哪里有问题?
以上是原问题.
根据jpmonty
的答案我实现成功了,就是增加了一个静态声明就解决了. 在mybatis
中调用内部类要用$
符号,这也是网上查到的,但是没有说明需要使用静态内部类.
至于原因,我的猜测是,静态内部类能直接调用new Inner()
,而内部类却只能通过new Outer()
生成的实例来调用内部类.所以可以通过这种方法实现.
用静态内部类可以实现,不过这样用也没啥意义