spring
與mybatis
的結合確定不會陌生,可是回想起來mybatis的使用與原理彷佛有些模糊了,故從新搭建操做理一下思路。java
雖然沒有按着官方文檔上的來,可是沒有發現任何的問題,有問題望指正。
![]()
mybatis-config.xml
使用mybatis最基本的全局配置,單個使用mybatis時
須要配置最基本的數據源(DataSource)、事務管理器(TransactionManager)和映射器(mapper),再在本身的代碼中建立SqlSessionFactoryBuilder構建SqlSessionFactory,再獲取session執行自定義映射文件中包含的sql方法spring
可是在spring-mybatis的整合時
,要配置的不多,最簡單的配置一個實體類包名便可,其他內容能夠在spring部分配置。sql
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接口裏的方法,是不能重載的,由於是全限名+方法名的保存和尋找策略。
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
類,其中locations屬性可用於加載該文件中key-value做該xml中變量使用。如: ${username}com.mchange.v2.c3p0.ComboPooledDataSource
數據庫鏈接beanorg.mybatis.spring.SqlSessionFactoryBean
bean,做用同mybatis中sqlSessionFactory,用做建立sqlsession,該bean中需配置三個屬性: dataSource
(引用上面配置的鏈接池)、configLocation
(mybatis主配置文件類路徑)、mapperLocations
(映射文件對應的包路徑)org.mybatis.spring.mapper.MapperScannerConfigurer
下屬性basePackage配置便可org.springframework.jdbc.datasource.DataSourceTransactionManager
溫故而知新,寫個文章更加新,在路上。ui