當(dāng)mybatis返回值遇見內(nèi)部類的問題
背景
使用mybatis返回內(nèi)部類時,無法點擊過去,啟動報錯
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)系,不用的.。
同時,內(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,啟動時不會報錯,但是請求方法時會報如下錯誤:
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.
從字面上看,一個被稱為靜態(tài)嵌套類,一個被稱為內(nèi)部類。 從字面的角度解釋是這樣的:
- 什么是嵌套?嵌套就是我跟你沒關(guān)系,自己可以完全獨立存在。
- 什么是內(nèi)部?內(nèi)部就是我是你的一部分,我了解你,我知道你的全部,沒有你就沒有我。(所以內(nèi)部類對象是以外部類對象存在為前提的)
至于具體的使用場景見官網(wǎng):
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis-plus中QueryWrapper的多種用法小結(jié)
本文主要介紹了Mybatis-plus中QueryWrapper的多種用法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04使用Spring boot 的profile功能實現(xiàn)多環(huán)境配置自動切換
這篇文章主要介紹了使用Spring boot 的profile功能實現(xiàn)多環(huán)境配置自動切換的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2018-11-11java yaml轉(zhuǎn)properties工具類方式
這篇文章主要介紹了java yaml轉(zhuǎn)properties工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10在springboot中注入FilterRegistrationBean不生效的原因
這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08快速學(xué)會Dubbo的配置環(huán)境及相關(guān)配置
本文主要講解Dubbo的環(huán)境與配置,文中運用大量代碼和圖片講解的非常詳細,需要學(xué)習(xí)或用到相關(guān)知識的小伙伴可以參考這篇文章2021-09-09