當(dāng)mybatis返回值遇見內(nèi)部類的問題
背景
使用mybatis返回內(nèi)部類時(shí),無法點(diǎn)擊過去,啟動(dòng)報(bào)錯(cuò)
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類中的內(nèi)部類:
映射寫法:resultType=" com.XXX.A$B">
A類和B類之間用 $表示內(nèi)外關(guān)系,不用的.。
同時(shí),內(nèi)部類需用內(nèi)static修飾:
@Data
public class A {
Long value;
String label;
List<B> children;
/**
* 內(nèi)部類
*/
@Data
public static class B {
Long value;
String label;
List<C> children;
}
/**
* 內(nèi)部類
*/
@Data
public static class C {
Long value;
String label;
}
}
為什么要用static
如果未加static,啟動(dòng)時(shí)不會(huì)報(bào)錯(cuò),但是請(qǐng)求方法時(shí)會(huì)報(bào)如下錯(cuò)誤:
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]
未匹配到構(gòu)造器
靜態(tài)內(nèi)部類和內(nè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.
從字面上看,一個(gè)被稱為靜態(tài)嵌套類,一個(gè)被稱為內(nèi)部類。 從字面的角度解釋是這樣的:
- 什么是嵌套?嵌套就是我跟你沒關(guān)系,自己可以完全獨(dú)立存在。
- 什么是內(nèi)部??jī)?nèi)部就是我是你的一部分,我了解你,我知道你的全部,沒有你就沒有我。(所以內(nèi)部類對(duì)象是以外部類對(duì)象存在為前提的)
至于具體的使用場(chǎng)景見官網(wǎng):
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解
今天小編就為大家分享一篇關(guān)于Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04
Java利用Geotools實(shí)現(xiàn)不同坐標(biāo)系之間坐標(biāo)轉(zhuǎn)換
GeoTools 是一個(gè)開源的 Java GIS 工具包,可利用它來開發(fā)符合標(biāo)準(zhǔn)的地理信息系統(tǒng)。本文將利用工具包Geotools實(shí)現(xiàn)不同坐標(biāo)系之間坐標(biāo)轉(zhuǎn)換,感興趣的可以了解一下2022-08-08
Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫數(shù)字識(shí)別的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫數(shù)字識(shí)別的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
解決Springboot項(xiàng)目中很多頁(yè)面出現(xiàn)Whitelabel Error Page(404)的問題
最近在接手的前后端項(xiàng)目中發(fā)現(xiàn)其默認(rèn)路徑不是主機(jī)+端口(如:http://localhost:3453/)的形式,很多頁(yè)面的訪問是加了一個(gè)層級(jí),只要訪問頁(yè)面就會(huì)出現(xiàn)Whitelabel Error Page(404),所以本文給大家提供了解決方案,需要的朋友可以參考下2024-02-02
SpringBoot請(qǐng)求參數(shù)傳遞與接收示例詳解
本文給大家介紹SpringBoot請(qǐng)求參數(shù)傳遞與接收示例詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-08-08

