当mybatis返回值遇见内部类
背景使用mybatis返回内部类时,无法点击过去,启动报错Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.XXX.A$B'.Cause: java.lang.ClassNotFoundException: Cannot find class: com.XXX.A$Bat org.a
背景
使用mybatis返回内部类时,无法点击过去,启动报错
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.XXX.A$B'.
Cause: java.lang.ClassNotFoundException: Cannot find class: com.XXX.A$B
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
... 65 common frames omitted
解决方案
如果B类是A类中的内部类:
映射写法:resultType=" com.XXX.A$B">
A类和B类之间用 $表示内外关系,不用的.。
同时,内部类需用内static修饰:
@Data
public class A {
Long value;
String label;
List<B> children;
/**
* 内部类
*/
@Data
public static class B {
Long value;
String label;
List<C> children;
}
/**
* 内部类
*/
@Data
public static class C {
Long value;
String label;
}
}
为什么要用static
如果未加static,启动时不会报错,但是请求方法时会报如下错误:
Caused by: org.apache.ibatis.executor.ExecutorException:
No constructor found in com.XXX.A$B matching
[java.lang.Long, java.lang.String, java.lang.Long, java.lang.String, java.lang.Long, java.lang.String]
未匹配到构造器
静态内部类和内部类区别
Oracle官方的说法:
Terminology: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes.
从字面上看,一个被称为静态嵌套类,一个被称为内部类。 从字面的角度解释是这样的:
什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在。
什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)
至于具体的使用场景见官网:
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)