java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis返回值遇见内部类

当mybatis返回值遇见内部类的问题

作者:三省同学

这篇文章主要介绍了当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$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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文