深刻淺出MyBatis技術原理與實踐-第八章 MyBatis-Spring(二) ------配置文件詳解spring
本文主要講述經過註解配置MyBatis-Spring。sql
配置分爲幾個部分:數據庫
1 配置數據源 2 配置SqlSessionFactory 3 配置SqlSessionTemplate 4 配置Mapper 5 事務處理
mybatis中,使用SqlSessionFactory來產生SqlSession。編程
mybatis-spring中,使用SqlSessionTemplate來完成,它封裝了對SqlSession的操做。因此經過SqlSessionTemplate能夠獲得Mapper。mybatis
SqlSessionFactoryBean
1.dataSource
2.configLocation
配置示例以下:app
1 <bean id="dataSource" class="..."> 2 </bean> 3 4 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 5 <property name="dataSource" ref="dataSource"/> 6 <property name="configLocation" value="classpath:mybatis.xml"/> 7 </bean>
其中配置文件mybatis.xml的配置示例以下:spa
(注意,由於Spring已經初始化了數據源,就是上面那個id爲dataSource的bean,在mybatis的配置文件中就不須要再配置關於數據庫的environments節點了。原本mybatis中,environments裏配置了datasource和transactionManager等。)code
1 <configuration> 2 <settings>...<settings> 3 <typeAliases>....<typeAliases> 4 <mappers> 5 <mapper resource="com\lyh\po\role.xml"/> 6 <mappers> 7 </configuration>
有兩種構建方法。xml
構建方法1:blog
1 <bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 2 <constructor-arg index="0" ref="sqlSessionFactory"> 3 </bean>
構建方法2:
這裏的第二個參數,是執行器類型ExecutorType,他是一個枚舉類,有三個值能夠選。
1 <bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 2 <constructor-arg index="0" ref="sqlSessionFactory"> 3 <constructor-arg name="1" value="BATCH/SIMPLE/REUSE"> 4 </bean>
1 <!-- 掃描basePackage下全部以@Repository標識的接口 --> 2 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 3 <property name="basePackage" value="com.lyh.dao"/> 4 <property name="annotationClass" value="yorg.springframework.stereotype.Repository"/> 5 <!--顯示指定template的名字 6 <property name="sqlSessionTemplateBeanName" value=""/> 7 --> 8 <!--指定實現了何種接口,就被認爲是映射器mapper 9 <property name="markerInterface" value=""/> 10 --> 11 </bean>
注意,dao包下的類別忘記加上註解@Repository。
1 @Repository 2 public interface UserDao{ 3 .... 4 }
mybatis單獨使用時,數據源DataSource和事務管理TransactionManager都是在environments節點下配置的。
mybatis-spring使用時,mybatis的配置文件mybatis.xml不須要再配置DataSource,正如前面所言,由於spring已經配置好了,以bean的形式。
而事務管理,mybatis-spring是使用Spring AOP去管理的。因此一樣的,mybatis的配置文件mybatis.xml不須要再配置TransactionManager,而是以bean的形式配置以下:
Spring AOP分爲聲明式事務和編程式事務,通常使用前者。
1 <!-- 使用annotation定義事務,聲明式 --> 2 <tx:annotation-driven transaction-manager="txManager"/> 3 4 <!-- 事務管理器, Jdbc單數據源事務 --> 5 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 6 <property name="dataSource" ref="dataSource"/> 7 </bean>
到此配置就結束了。
彙總一下,一共有兩個文件,mybatis-spring.xml和mybatis.xml。
(1)mybatis-spring.xml
1 配置數據源
2 配置SqlSessionFactory
3 配置SqlSessionTemplate
4 配置Mapper
5 事務處理
1 <bean id="dataSource" class="..."> 2 </bean> 3 4 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 5 <property name="dataSource" ref="dataSource"/> 6 <property name="configLocation" value="classpath:sqlMapConfig.xml"/> 7 </bean> 1 <bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 2 <constructor-arg index="0" ref="sqlSessionFactory"> 3 </bean> 1 <!-- 掃描basePackage下全部以@Repository標識的接口 --> 2 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 3 <property name="basePackage" value="com.lyh.dao"/> 4 <property name="annotationClass" value="yorg.springframework.stereotype.Repository"/> 5 <!--顯示指定template的名字 6 <property name="sqlSessionTemplateBeanName" value=""/> 7 --> 8 <!--指定實現了何種接口,就被認爲是映射器mapper 9 <property name="markerInterface" value=""/> 10 --> 11 </bean> 1 <!-- 使用annotation定義事務,聲明式 --> 2 <tx:annotation-driven transaction-manager="txManager"/> 3 4 <!-- 事務管理器, Jdbc單數據源事務 --> 5 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 6 <property name="dataSource" ref="dataSource"/> 7 </bean>
(2)mybatis.xml
1 <configuration> 2 <settings>...<settings> 3 <typeAliases>....<typeAliases> 4 <mappers> 5 <mapper resource="com\lyh\po\role.xml"/> 6 <mappers> 7 </configuration>