SpringBoot整合Mybatis,TypeAliases配置失敗的問題


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");
        ...
    }

參考

完結!


免責聲明!

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



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