問題:git
tk.mybatis.mapper.MapperException: 沒法獲取實體類com.*.* 對應的表名github
環境:spring
springboot 2.0.6, 通用mapper 2.0.4,還有 spring-devtools springboot
描述一下:mybatis
這個環境我以前在用,也用的好好的,並無出問題。app
解決:工具
問題出來了仍是中文異常(通用mapper 拋出的異常),習慣性的度娘,其實這個問題我以前遇到過,果然度娘上的大神都說是配置問題(@MapperScan 導入包爲import tk.mybatis.spring.annotation.MapperScan;),怎麼可能?我仍是檢查了一下,固然不多是配置出錯了。測試
去翻了一下通用mapper的文檔,找到問題了:Spring Boot 中使用 Devtools 和 通用mapper 不兼容,做者說問題是由於熱部署插件會把項目中classes下的類和jar包下的類分開加載(RestartClassLoader ,AppClassLoader ),通用mapper的EntityHelper初始化就讀不到相關的實體類信息了,以前的版本解決方法就是把mapper的相關jar包經過配置讓RestartClassLoader去加載,我也跟着試了一下,發現並不行。繼續看文檔。。。而後看到做者寫道:「若是你真遇到這個問題,最直接的方法就是禁用 Devtools 工具。」........不可能算了,熱部署在開發中這麼方便,丟了實在惋惜,想一想做者發現的問題就是類不是同一種方式加載的,那上面的配置應該是正確的思路,別人怎麼就能解決呢。spa
看着看着就有了新發現:我這裏mapper加載到的實體類和接口有的是其餘項目中寫的,而後經過本地jar導入當前項目的。 和通用mapper和做者以前測試 時說的狀況差很少。那就把這些實體類接口經過配置讓RestartClassLoader去加載(spring-devtools.properties):.net
restart.include.mapper=/mapper-[\\w-\\.]+jar,/mycorp-[\\w-\\.]+jar
啓動測試.... 媽蛋,仍是這個錯。想一想mapper做者說過:「最合理的狀況就是沒有 spring-devtools.properties 配置文件」。那就是不用把通用mapper相關包加進去:
restart.include.mapper=/mycorp-[\\w-\\.]+jar
理論上這樣才合理(這樣也行,那應該時我上面的配置用「,」隔開是錯的。。):
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.myname=/mycorp-[\\w-\\.]+jar
這樣把我本身的實體類和接口包使用RestartClassLoader去加載,啓動測試.... 居然能夠了
問題估計就是通用mapper須要掃描的接口和對應的實體類沒有掃描到而已,因此要用熱部署和通用mapper的話就檢查一下所使用的mapper接口和實體類有沒有可能不在RestartClassLoader中加載