當(dāng)mybatis返回值遇見內(nèi)部類的問(wèn)題
背景
使用mybatis返回內(nèi)部類時(shí),無(wú)法點(diǎn)擊過(guò)去,啟動(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官方的說(shuō)法:
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)部類。 從字面的角度解釋是這樣的:
- 什么是嵌套?嵌套就是我跟你沒(méi)關(guān)系,自己可以完全獨(dú)立存在。
- 什么是內(nèi)部??jī)?nèi)部就是我是你的一部分,我了解你,我知道你的全部,沒(méi)有你就沒(mé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)文章
Mybatis-plus中QueryWrapper的多種用法小結(jié)
本文主要介紹了Mybatis-plus中QueryWrapper的多種用法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04使用Spring boot 的profile功能實(shí)現(xiàn)多環(huán)境配置自動(dòng)切換
這篇文章主要介紹了使用Spring boot 的profile功能實(shí)現(xiàn)多環(huán)境配置自動(dòng)切換的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11java yaml轉(zhuǎn)properties工具類方式
這篇文章主要介紹了java yaml轉(zhuǎn)properties工具類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10在springboot中注入FilterRegistrationBean不生效的原因
這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08快速學(xué)會(huì)Dubbo的配置環(huán)境及相關(guān)配置
本文主要講解Dubbo的環(huán)境與配置,文中運(yùn)用大量代碼和圖片講解的非常詳細(xì),需要學(xué)習(xí)或用到相關(guān)知識(shí)的小伙伴可以參考這篇文章2021-09-09java版微信公眾平臺(tái)消息接口應(yīng)用示例
這篇文章主要介紹了java版微信公眾平臺(tái)消息接口應(yīng)用,結(jié)合實(shí)例形式對(duì)比分析了PHP與java應(yīng)用微信公眾平臺(tái)接口的相關(guān)調(diào)用與操作技巧,需要的朋友可以參考下2017-07-07spring mvc 組合mybatis框架實(shí)例詳解
本項(xiàng)目采用 maven 結(jié)構(gòu),主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回?cái)?shù)據(jù)。對(duì)spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文2018-01-01