记一次mybatis返回类型为内部类时的问题
<select id="countCreateAndEnd" resultType="com.wafa.model.OperaOrderNum$TodayNum">
</select>
tip:此处使用内部类需要用 代 替 . 这 是 我 写 的 m a p p e r , 里 边 用 到 了 O p e r a O r d e r N u m 代替. 这是我写的mapper,里边用到了OperaOrderNum 代替.这是我写的mapper,里边用到了OperaOrderNumTodayNum这个内部类
@Data
public class OperaOrderNum {
private TodayNum repair;
private TodayNum replaceLx;
@Data
public class TodayNum {
private Integer createNum;
private Integer endNum;
}
}
这是我定义内部类的地方;
然后在运行项目,执行查询是报错了,nosuchmethodexception:.(),这个异常意思是这个内部类没有默认无参构造, 结合上图,这必然是指其他原因.
因为mybatis是用的反射, 既然反射新建对象时会报错 ,那直接new调用无参构造会怎样?
我尝试用new实例这个内部类对象时,idea提示我需要把这个类设置为static静态内部类
把内部类改为静态后,mybatis也可以正常使用它了. 那为什么必须是静态内部类才能被反射或new出来呢? 我查了一下,有个解释比较合理,参考一下:
’创建非静态内部类对象时,一定要先创建起相应的外部类对象。不能直接创建.所以也就是说不能直接创建.要想在外部能直接创建,就用静态的内部类’