SpringDataJdbc整合MyBatis方式


由於官方文檔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,當然,這些SqlSessionFactoryBeansqlSessionTemplate已經由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了。。。

 

 

 

 

 


免責聲明!

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



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