spring 整合 mybatis


springmybatis的結合確定不會陌生,可是回想起來mybatis的使用與原理彷佛有些模糊了,故從新搭建操做理一下思路。java


使用的版本:

  • mybatis-spring-2.0.3
  • mybatis-3.4.5
  • spring-5.0.2
  • java-8
雖然沒有按着官方文檔上的來,可是沒有發現任何的問題,有問題望指正。
image.png

mybatis 部分

全局配置文件

mybatis-config.xml 使用mybatis最基本的全局配置,單個使用mybatis時須要配置最基本的數據源(DataSource)、事務管理器(TransactionManager)和映射器(mapper),再在本身的代碼中建立SqlSessionFactoryBuilder構建SqlSessionFactory,再獲取session執行自定義映射文件中包含的sql方法spring

可是在spring-mybatis的整合時,要配置的不多,最簡單的配置一個實體類包名便可,其他內容能夠在spring部分配置。sql

mapper接口與映射文件

interface xxxMapper 就是單純的包含一組有關xxx實體類的相關CRUD方法。數據庫

xxxMapper.xml 是針對各自的實體類進行單獨的sql語句配置,其中最關鍵的當屬namespace標籤,由於靠它來找到須要執行的sql。其中接口的全限名,就是映射文件中的namespace的值;接口的方法名,就是映射文件中MappedStatement的id值(在Mybatis中,每個<select>、<insert>、<update>、<delete>標籤,都會被解析爲一個MappedStatement對象);接口方法內的參數,就是傳遞給sql的參數。session

Mapper接口是沒有實現類的,當調用接口方法時,接口全限名+Mapper接口裏的方法,是不能重載的,由於是全限名+方法名方法名拼接字符串做爲key值,可惟必定位一個MappedStatement,舉例:com.mybatis.mapper.UserMapper.selectUser,能夠惟一找到namespace爲com.mybatis.mapper.UserMapper下面id爲selectUser的MappedStatement。mybatis

Mapper接口的工做原理是JDK動態代理,Mybatis運行時會使用JDK動態代理爲Mapper接口生成代理proxy對象,代理對象proxy會攔截接口方法,轉而執行MappedStatement所表明的sql,而後將sql執行結果返回。app

Mapper接口裏的方法,是不能重載的,由於是全限名+方法名的保存和尋找策略。

spring 部分

mybatis其他配置
  1. jdbc.properties: 提供了 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer類,其中locations屬性可用於加載該文件中key-value做該xml中變量使用。如: ${username}
  2. c3p0鏈接池: 配置com.mchange.v2.c3p0.ComboPooledDataSource 數據庫鏈接bean
  3. SqlSessionFactory: 在spring中配置須要org.mybatis.spring.SqlSessionFactoryBean bean,做用同mybatis中sqlSessionFactory,用做建立sqlsession,該bean中需配置三個屬性: dataSource(引用上面配置的鏈接池)、configLocation(mybatis主配置文件類路徑)、mapperLocations(映射文件對應的包路徑)
  4. mapper接口掃描:有多種配置方法,使用bean org.mybatis.spring.mapper.MapperScannerConfigurer下屬性basePackage配置便可
  5. 配置spring事務管理器: org.springframework.jdbc.datasource.DataSourceTransactionManager


溫故而知新,寫個文章更加新,在路上。ui

相關文章
相關標籤/搜索