當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]
未匹配到構造器
靜態(tài)內部類和內部類區(qū)別
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.
從字面上看,一個被稱為靜態(tài)嵌套類,一個被稱為內部類。 從字面的角度解釋是這樣的:
- 什么是嵌套?嵌套就是我跟你沒關系,自己可以完全獨立存在。
- 什么是內部?內部就是我是你的一部分,我了解你,我知道你的全部,沒有你就沒有我。(所以內部類對象是以外部類對象存在為前提的)
至于具體的使用場景見官網(wǎng):
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java的外部類為什么不能使用private和protected進行修飾的講解
今天小編就為大家分享一篇關于Java的外部類為什么不能使用private和protected進行修飾的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04
Java利用Geotools實現(xiàn)不同坐標系之間坐標轉換
GeoTools 是一個開源的 Java GIS 工具包,可利用它來開發(fā)符合標準的地理信息系統(tǒng)。本文將利用工具包Geotools實現(xiàn)不同坐標系之間坐標轉換,感興趣的可以了解一下2022-08-08
Java實現(xiàn)BP神經網(wǎng)絡MNIST手寫數(shù)字識別的示例詳解
這篇文章主要為大家詳細介紹了Java實現(xiàn)BP神經網(wǎng)絡MNIST手寫數(shù)字識別的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
解決Springboot項目中很多頁面出現(xiàn)Whitelabel Error Page(404)的問題
最近在接手的前后端項目中發(fā)現(xiàn)其默認路徑不是主機+端口(如:http://localhost:3453/)的形式,很多頁面的訪問是加了一個層級,只要訪問頁面就會出現(xiàn)Whitelabel Error Page(404),所以本文給大家提供了解決方案,需要的朋友可以參考下2024-02-02

