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

 更新时间:2023年12月01日 16:06:01   作者:三省同学  
这篇文章主要介绍了当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

总结

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

相关文章

  • Springboot @Value使用代码实例

    Springboot @Value使用代码实例

    这篇文章主要介绍了Springboot @Value使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java的外部类为什么不能使用private和protected进行修饰的讲解

    Java的外部类为什么不能使用private和protected进行修饰的讲解

    今天小编就为大家分享一篇关于Java的外部类为什么不能使用private和protected进行修饰的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Java实现按比例缩小图片

    Java实现按比例缩小图片

    这篇文章主要为大家详细介绍了Java实现按比例缩小图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java利用Geotools实现不同坐标系之间坐标转换

    Java利用Geotools实现不同坐标系之间坐标转换

    GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。本文将利用工具包Geotools实现不同坐标系之间坐标转换,感兴趣的可以了解一下
    2022-08-08
  • Java实现BP神经网络MNIST手写数字识别的示例详解

    Java实现BP神经网络MNIST手写数字识别的示例详解

    这篇文章主要为大家详细介绍了Java实现BP神经网络MNIST手写数字识别的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-01-01
  • 解决Springboot项目中很多页面出现Whitelabel Error Page(404)的问题

    解决Springboot项目中很多页面出现Whitelabel Error Page(404)的问题

    最近在接手的前后端项目中发现其默认路径不是主机+端口(如:http://localhost:3453/)的形式,很多页面的访问是加了一个层级,只要访问页面就会出现Whitelabel Error Page(404),所以本文给大家提供了解决方案,需要的朋友可以参考下
    2024-02-02
  • Spring IOC 三种配置方式详解

    Spring IOC 三种配置方式详解

    这篇文章主要介绍了Spring IOC 三种配置方式,基于xml配置方式组件管理,基于注解方式管理和配置类方式管理,这三种方式,通过图文讲解的非常详细,需要的朋友可以参考下
    2024-05-05
  • 详解Java深拷贝,浅拷贝和Cloneable接口

    详解Java深拷贝,浅拷贝和Cloneable接口

    这篇文章主要为大家详细介绍了Java中Cloneable接口以及深拷贝与浅拷贝的相关知识,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-08-08
  • SpringBoot请求参数传递与接收示例详解

    SpringBoot请求参数传递与接收示例详解

    本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-08-08
  • Java读取String分行字符串的方法

    Java读取String分行字符串的方法

    今天小编就为大家分享一篇Java读取String分行字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论