將 MyBatis 與 Spring 進(jìn)行整合,主要解決的問(wèn)題就是將 SqlSessionFactory 對(duì)象交由 Spring 來(lái)管理。所以,該整合,只需要將 SqlSessionFactory 的對(duì)象生成器 SqlSessionFactoryBean 注冊(cè)在 Spring 容器中,再將其注入給 Dao 的實(shí)現(xiàn)類(lèi)即可完成整合。
實(shí)現(xiàn) Spring 與 MyBatis 的整合常用的方式:掃描的 Mapper 動(dòng)態(tài)代理
無(wú)論哪種實(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)行測(cè)試,所以導(dǎo)入 JUnit 的 Jar 包。
連接 mysql 數(shù)據(jù)庫(kù),所以導(dǎo)入 mysql 驅(qū)動(dòng) Jar 包。
連接數(shù)據(jù)庫(kù)使用 Druid 連接池和 DBCP 連接池,所以導(dǎo)入 Druid 和 DBCP 的 jar 包。
● 所有的 jar
在 Dao 接口的包中創(chuàng)建 MyBatis 的映射文件 mapper,命名與接口名相同,本例為StudentDao.xml。mapper 中的 namespace 取值也為 Dao 接口的全限定性名。
接口定義:
實(shí)現(xiàn)類(lèi)定義:
在 src 下定義 MyBatis 的主配置文件,命名為 mybatis.xml。
這里有兩點(diǎn)需要注意:
● 主配置文件中不再需要數(shù)據(jù)源的配置了。因?yàn)閿?shù)據(jù)源要交給 Spring 容器來(lái)管理了。
● 這里對(duì) mapper 映射文件的注冊(cè),使用標(biāo)簽,即只需給出 mapper 映射文件所在的包即可。因?yàn)?mapper 的名稱(chēng)與 Dao 接口名相同,可以使用這種簡(jiǎn)單注冊(cè)方式。這種方式的好處是,若有多個(gè)映射文件,這里的配置也是不用改變的。當(dāng)然,也可使用原來(lái)的 標(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 下的項(xiàng)目.
官網(wǎng):http://commons.apache.org/proper/commons-dbcp/
使用該數(shù)據(jù)源,需要導(dǎo)入兩個(gè) Jar 包:dbcp , commons-pool2
依賴的 commons-pool2 的下載地址:http://commons.apache.org/proper/commons-pool/download_pool.cgi
DBCP 數(shù)據(jù)源是 BasicDataSource,Ctrl + O 查看其類(lèi)結(jié)構(gòu)可看到,其有 driverClassName、url、username、password 四個(gè) DB 連接屬性。
B、Druid 數(shù)據(jù)源 DruidDataSource
Druid 是阿里的開(kāi)源數(shù)據(jù)庫(kù)連接池。 是 Java 語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池。Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能。Druid 與其他數(shù)據(jù)庫(kù)連接池的最大區(qū)別是提供數(shù)據(jù)庫(kù)的監(jiān)控功能。
官網(wǎng):https://github.com/alibaba/druid
使用地址:https://github.com/alibaba/druid/wiki/常見(jiàn)問(wèn)題
配置數(shù)據(jù)庫(kù)監(jiān)控:
配置連接池:
Spring配置文件:
為了便于維護(hù),可以將數(shù)據(jù)庫(kù)連接信息寫(xiě)入到屬性文件中,使 Spring 配置文件從中讀取數(shù)據(jù)。
屬性文件名稱(chēng)隨意,但一般都是放在 src 下。
Spring 配置文件從屬性文件中讀取數(shù)據(jù)時(shí),需要在的 value 屬性中使用${ },將在屬性文件中定義的 key 括起來(lái),以引用指定屬性的值。
該屬性文件若要被 Spring 配置文件讀取,其必須在配置文件中進(jìn)行注冊(cè)。使用 標(biāo)簽。
<context:property-placeholder/>方式
該方式要求在 Spring 配置文件頭部加入 spring-context.xsd 約束文件
標(biāo)簽中有一個(gè)屬性 location,用于指定屬性文件的位置。
Mapper 掃描配置器 MapperScannerConfigurer 會(huì)自動(dòng)生成指定的基本包中 mapper 的代理對(duì)象。該 Bean 無(wú)需設(shè)置 id 屬性。
向 Service 注入 Mapper 代理對(duì)象時(shí)需要注意,由于通過(guò) Mapper 掃描配置器MapperScannerConfigurer 生成的 Mapper 代理對(duì)象沒(méi)有名稱(chēng),所以在向 Service 注入 Mapper代理時(shí),無(wú)法通過(guò)名稱(chēng)注入。但可通過(guò)接口的簡(jiǎn)單類(lèi)名注入,因?yàn)樯傻氖沁@個(gè) Dao 接口的對(duì)象。