版本資訊:
Spring Boot 2.1.3.RELEASE
問題一:找不到 Mapper Bean
錯誤資訊:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
01:56:25.921 logback [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -
***************************
APPLICATION FAILED TO START
***************************
Description:
A component required a bean of type 'com.example.boss.admin.dao.mapper.SeckillMapper' that could not be found.
Action:
Consider defining a bean of type 'com.example.boss.admin.dao.mapper.SeckillMapper' in your configuration.
複製程式碼
原因:
Mapper.java 和 Mapper.xml 放在不同的 jar 包工程裡,預設情況下 mybatis 只讀取同一個工程裡的 Mapper Bean,即便加上了 @Mapper 註釋也不行。
解決方法:
在 DataSourceConfig 裡增加一個 bean 來處理
/**
* Mapper介面所在包名,Spring會自動查詢其下的Mapper
*
* @return mapperScannerConfigurer
*/
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("**.mapper");
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
return mapperScannerConfigurer;
}
複製程式碼
問題二:找不到 Mapper.xml
錯誤資訊:
原因:
預設情況下,Mapper.xml 檔案是放在 src/main/resources 目錄下的,但由於用了 mybatis generator 的原因,把 xml 放在了 src/main/java 目錄下,方便生成和管理。
解決方法:
在專案的 pom.xml 增加以下配置
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!-- resources配置解決mybatis 的mapperXml配置在java路徑不被掃描的問題 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
複製程式碼
問題三:如何讀取多個模組專案下的 Mapper.xml 檔案?
解決方法:
解決辦法就是在classpath後加一個*就解決了,如
mybatis:
mapper-locations: classpath*:mapper/*.xml
複製程式碼