基於SpringBoot加載Mybatis的TypeAlias問題
SpringBoot加載Mybatis的TypeAlias
springboot打成jar之後再linux上運行會報找不到 type alias 對應的實體類的問題,這是springboot掃包的問題。
工程上默認使用的是Mybatis的DefaultVFS進行掃描,但是在springboot的環境下,Mybatis的DefaultVFS這個掃包會出現問題,所以隻能修改VFS,為瞭清晰可見
直接貼代碼:
@Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { logger.info("load SpringBootVFS"); //DefaultVFS在獲取jar上存在問題,使用springboot隻能修改 VFS.addImplClass(SpringBootVFS.class); SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources1 = resolver.getResources("classpath*:/mybatis/*.xml"); Resource[] resources2 = resolver.getResources("classpath*:/mysql/mapper/*.xml"); Resource[] resources = (Resource[]) ArrayUtils.addAll(resources1,resources2); sqlSessionFactoryBean.setMapperLocations(resources); sqlSessionFactoryBean.setTypeAliasesPackage("com.xxx.xx.entity"); return sqlSessionFactoryBean.getObject(); }
springboot打包啟動時報mybatis的typeAlias類名找不到的錯誤
springBoot項目在IDEA上面正常但是打包之後運行 出錯,錯誤大致為mybatis解析Mapper.xml時 typeAlias找不到XX類
Mapper裡面的標簽:
<select parameterType="XXClass" resultMap="XXMap">
這種寫法在IDEA裡面運行沒問題 打包就有問題
正確寫法:
<select parameterType="cn.test.xxx.XXClass" resultMap="XXMap">
代碼中的parameterType必須要用全路徑才行 否則就出錯。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Mybatis之typeAlias配置的3種方式小結
- 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug
- 關於Mybatis實體別名支持通配符掃描問題小結
- MyBatis 如何配置多個別名 typeAliasesPackage
- mybatis那些約定的配置你真的都瞭解嗎(經驗總結)