SpringBoot整合Mybatis,TypeAliases配置失敗的問題
問題描述
在應用MyBatis時,使用對象關系映射,將對象和Aliase映射起來。
在Mybatis的文檔明確寫出,如果你沒有明確定義實體類的Aliase,框架會自動將Class Name自動
作為別名。
那么問題來了,當使用java -jar xxx.jar&
啟動的時候,會報出以下錯誤,
Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'XXXXX'.Cause: java.lang.ClassNotFoundException: Cannot find class: XXXXX
從異常信息來看,明顯就是無法從本地檢索到alise
對應的類,並最終導致sqlSessionFactory
等初始化
失敗。而且吊軌的是,直接在Idea中啟動是沒有問題的,啟動jar包才會出現這個問題
解決方法
參考博主A_Beaver的文章,原來mybatis的facroty需要加載SpringBoot獨特的虛擬文件系統,才能識別類路徑
public SpringBootVFS() {
this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
}
從以上代碼看,其實是通過PathMatchingResourcePatternResolver
實現資源的加載
修復該問題只需要在mybatis的配置類中,設置一下factory即可,
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setVfs(SpringBootVFS.class);//設置SpringBootVFS
bean.setTypeAliasesPackage("com.fulan.domain.red");
...
}
參考
完結!