spring boot+tkmybatis(mapper)工具實現通用數據操作接口時遇到的問題


最近在做一個sb+tkmybatis整合的可以提供通用數據操作接口的demo,然而出現了很詭異的事情.,使用mapper提供的selectByPrimaryKey接口返回結果時報異常: 


java.lang.ClassCastException: com.yhq.ssmdemo.web.mysql.pojo.Tree cannot be cast to com.yhq.ssmdemo.web.mysql.pojo.Trees

 

...什么鬼?自己轉換自己?還報異常?搞了一整天都不知道怎么回事,去看mybatis源碼,mapper源碼,都沒發現會造成這種問題的代碼..然后在另外一個不用springboot的demo里面試了卻不會出現這種問題。然后我又開始研究是不是spring boot自動配置時少了某些東西,但也沒發現,而且也不會是這種問題吧...然后后面上網搜了下(之前也搜過,但可能關鍵字不准確導致搜出來的沒有想要的結果),然后發現了一個同樣的問題,說這是工具造成的一個bug,但我還以為是mapper工具,看了他給出的解決方案然后才知道是spring devtools這個工具。由於是本地開發的,所以用了spring devtools工具來進行監測代碼修改自動重啟,我們知道這個工具的原理就是使用兩個類加載器,一個加載不會改變的第三方的依賴jar;另一個加載自己項目中自己編寫的類。所以會出現這個異常就是由於這個問題導致的,下面上圖,這樣可以更加清晰直觀地看出來,

這個是在項目啟動spring devtools模塊時進行堆dump的圖,可以看到我自己寫的許多類都有兩個:

這個是項目不啟用spring devtools模塊的堆dump圖,自己寫的類只有一個:

所以這完全就是spring devtools的使用導致的,那怎么解決呢?讓同一個類加載器去加載mapper的jar和自己寫的實體類就行了:

在項目的src/main/resources目錄下新建一個目錄:META-INF,然后新建一個spring-devtools.properties文件,內容為:restart.include.companycommonlibs=tk/mybatis.*即可。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM