將 MyBatis 與 Spring 進(jìn)行整合,主要解決的問題就是將 SqlSessionFactory 對象交由 Spring 來管理。所以,該整合,只需要將 SqlSessionFactory 的對象生成器 SqlSessionFactoryBean 注冊在 Spring 容器中,再將其注入給 Dao 的實(shí)現(xiàn)類即可完成整合。
實(shí)現(xiàn) Spring 與 MyBatis 的整合常用的方式:掃描的 Mapper 動態(tài)代理
無論哪種實(shí)現(xiàn)方式,均需要首先完成 Jar 包的導(dǎo)入。
● mybatis 的 Jar 包

● Spring 的 Jar 包

● mybatis 與 Spring 整合 Jar 包
該 Jar 包需要從 mybatis 官網(wǎng)下載。登錄 MyBatis 的下載官網(wǎng),下載地址:https://github.com/mybatis/spring/releases

下載后使用:

● 其它 Jar 包
程序需要使用 JUnit 進(jìn)行測試,所以導(dǎo)入 JUnit 的 Jar 包。
連接 mysql 數(shù)據(jù)庫,所以導(dǎo)入 mysql 驅(qū)動 Jar 包。
連接數(shù)據(jù)庫使用 Druid 連接池和 DBCP 連接池,所以導(dǎo)入 Druid 和 DBCP 的 jar 包。

● 所有的 jar




在 Dao 接口的包中創(chuàng)建 MyBatis 的映射文件 mapper,命名與接口名相同,本例為StudentDao.xml。mapper 中的 namespace 取值也為 Dao 接口的全限定性名。

接口定義:

實(shí)現(xiàn)類定義:

在 src 下定義 MyBatis 的主配置文件,命名為 mybatis.xml。
這里有兩點(diǎn)需要注意:
● 主配置文件中不再需要數(shù)據(jù)源的配置了。因?yàn)閿?shù)據(jù)源要交給 Spring 容器來管理了。
● 這里對 mapper 映射文件的注冊,使用標(biāo)簽,即只需給出 mapper 映射文件所在的包即可。因?yàn)?mapper 的名稱與 Dao 接口名相同,可以使用這種簡單注冊方式。這種方式的好處是,若有多個映射文件,這里的配置也是不用改變的。當(dāng)然,也可使用原來的 標(biāo)簽方式。

使用 JDBC 模板,首先需要配置好數(shù)據(jù)源,數(shù)據(jù)源直接以 Bean 的形式配置在 Spring 配置文件中。根據(jù)數(shù)據(jù)源的不同,其配置方式不同。下面主要講解二種常用數(shù)據(jù)源的配置方式:
● DBCP 數(shù)據(jù)源
● Druid 數(shù)據(jù)源
A、DBCP 數(shù)據(jù)源 BasicDataSource
DBCP,DataBase Connection Pool,是 apache 下的項目.
官網(wǎng):http://commons.apache.org/proper/commons-dbcp/

使用該數(shù)據(jù)源,需要導(dǎo)入兩個 Jar 包:dbcp , commons-pool2

依賴的 commons-pool2 的下載地址:http://commons.apache.org/proper/commons-pool/download_pool.cgi

DBCP 數(shù)據(jù)源是 BasicDataSource,Ctrl + O 查看其類結(jié)構(gòu)可看到,其有 driverClassName、url、username、password 四個 DB 連接屬性。


B、Druid 數(shù)據(jù)源 DruidDataSource
Druid 是阿里的開源數(shù)據(jù)庫連接池。 是 Java 語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能。Druid 與其他數(shù)據(jù)庫連接池的最大區(qū)別是提供數(shù)據(jù)庫的監(jiān)控功能。
官網(wǎng):https://github.com/alibaba/druid
使用地址:https://github.com/alibaba/druid/wiki/常見問題

配置數(shù)據(jù)庫監(jiān)控:

配置連接池:

Spring配置文件:

為了便于維護(hù),可以將數(shù)據(jù)庫連接信息寫入到屬性文件中,使 Spring 配置文件從中讀取數(shù)據(jù)。
屬性文件名稱隨意,但一般都是放在 src 下。

Spring 配置文件從屬性文件中讀取數(shù)據(jù)時,需要在的 value 屬性中使用${ },將在屬性文件中定義的 key 括起來,以引用指定屬性的值。

該屬性文件若要被 Spring 配置文件讀取,其必須在配置文件中進(jìn)行注冊。使用 標(biāo)簽。
<context:property-placeholder/>方式
該方式要求在 Spring 配置文件頭部加入 spring-context.xsd 約束文件
標(biāo)簽中有一個屬性 location,用于指定屬性文件的位置。


Mapper 掃描配置器 MapperScannerConfigurer 會自動生成指定的基本包中 mapper 的代理對象。該 Bean 無需設(shè)置 id 屬性。

向 Service 注入 Mapper 代理對象時需要注意,由于通過 Mapper 掃描配置器MapperScannerConfigurer 生成的 Mapper 代理對象沒有名稱,所以在向 Service 注入 Mapper代理時,無法通過名稱注入。但可通過接口的簡單類名注入,因?yàn)樯傻氖沁@個 Dao 接口的對象。

