由於官方文檔springdatajdbc整合mybatis過於簡述,導致死磕了一段時間,
SpringDataJdbc整合Mybatis的官方文檔:https://docs.spring.io/spring-data/jdbc/docs/2.0.0.RELEASE/reference/html/#jdbc.mybatis
至於選擇SpringDataJdbc + Mybatis這個原因,就是可以手動控制SQL語句並且基本的單表SQL直接可以繼承 CrudRepository 接口,不用再寫那些基本的SQL了,復雜的查詢直接可以定義在Mapper的XML文件里
此Demo項目的Git地址:https://github.com/starSmallDream/MySpringJDBCAndMyBatisExample.git
本人spring boot Maven項目,在pom文件加入mybatis和springdatajdbc的依賴
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency>
然后按照官方文檔進行配置Bean,當然,這些SqlSessionFactoryBean和sqlSessionTemplate已經由mybatis-spring-boot-starter依賴自動配置完了,所以,可以省略下面的Bean配置
@Configuration @EnableJdbcRepositories @Import(MyBatisJdbcConfiguration.class) class Application { @Bean SqlSessionFactoryBean sqlSessionFactoryBean() { // Configure MyBatis here } }
如果到這里還是啟動找不到Mapper接口的方法的話,那就是需要配置下NamespaceStrategy接口實現,根據自己的包結構進行返回Mapper接口的位置,由於這是通過 實體類(包名) + Mapper 命名的方式查找Mapper接口文件的,所以文件名還是需要規范下的。
這是我根據自己包的位置進行配置下Mapper文件的尋找路徑:
第一步:實現 NamespaceStrategy 接口

第二部:
把 MyBatisJdbcConfiguration 此類的方法copy出來,因為要使用我們自定義的命名空間策略

看這個類里面的代碼,你會找到為什么會執行不了Mapper文件的SQL語句
下圖是此Configuration配置類的內容

因為 對應的Mapper文件存在要執行的方法名的SQL語句,則優先執行Mapper文件的,否則,會執行CrudRepository里面的代碼,因為我的Mapper接口文件繼承了CrudRepository接口。

這樣,可以使用Mybatis的XML文件又可以使用基於SpringDataJdbc依賴的注解和方法名語義執行SQL了。。。
