(五)mybatis-spring的集成
mybatis-spring的集成
源碼下載(數據庫使用derby,具體數據庫結構參考這裏)
在src下新建applicationContext.xml
配置內容:數據源、SqlSessionFactory、Mapper、事務處理
一、配置SqlSessionFactory
需要兩個參數:數據源和Mybatis的配置文件路徑
這樣SpringIOC容器就會初始化這個SqlSessionFactoryBean,解析Mybatis配置文件連同數據源一同保存在SpringBean裏
1 <!-- 配置數據源 --> 2 <context:property-placeholderlocation="classpath:jdbc.properties"/> 3 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 4 <property name="driverClassName" value="${driver}"/> 5 <property name="url" value="${url}"/> 6 </bean> 7 8 <!--配置SQLSessionFactory --> 9 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 10 <property name="dataSource" ref="dataSource"/> 11 <property name="configLocation" value="classpath:mybatis-config.xml"/> 12 </bean>
jdbc.properties
driver=org.apache.derby.jdbc.ClientDriver
url=jdbc:derby://localhost:1527/E:/my/derby/mydb
在spring中已經初始化數據源,所以在mybatis配置文件中就無需再進行配置
mybatis.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <settings> 7 <!-- 開啟延遲加載 --> 8 <setting name="lazyLoadingEnabled" value="true"/> 9 <!-- 每種屬性按需加載 --> 10 <setting name="aggressiveLazyLoading" value="false"/> 11 </settings> 12 </configuration>
有些書中介紹了配置SqlSessionTemplate,當同時設置了SqlSessionFactory和SqlSessionTemplate,系統就會用SqlSessionTemplate覆蓋掉SqlSessionFactory,相比較而言,筆者還是喜歡采用Mapper接口的編程方式。
二、配置mapper(這裏采用自動掃描的形式)
采用MapperScannerConfigurer配置,屬性:
basePackage:指定讓Spring自動掃描的包
annotationClass:表示如果類被這個註解標識的時候才進行掃描
sqlSessionFactoryBeanName:指定在spring中定義sqlSessionFactory的bean名稱。如果被定義,sqlSessionFactory將不起作用
sqlSessionTemplateBeanName:指定在spring中定義sqlSessionTemplate的bean名稱。如果被定義,sqlSessionFactoryBeanName將不起作用
markerInterface:指定是實現了什麽接口就認為它是mapper
1 <!-- 接口方式 --> 2 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 3 <property name="basePackage" value="com.example.dao"></property> 4 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 5 </bean> 6 //在sqlSessionFactory中加載映射文件 7 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 8 <property name="dataSource" ref="dataSource"/> 9 <property name="configLocation" value="classpath:mybatis-config.xml"></property> 10 <!-- 加載映射文件 --> 11 <property name="mapperLocations" value="classpath*:/com/example/mapper/*Mapper.xml"></property> 12 </bean>
三、配置事務
1 <!-- 配置jdbc事務管理器,完成數據的完整性和一致性 --> 2 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 3 <property name="dataSource" ref="dataSource"></property> 4 </bean> 5 <!-- 使用聲明式事務管理方式 --> 6 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
配置service層
<!-- 啟動spring註解 --> <context:annotation-config/> <!-- 掃描註解所在的包 --> <context:component-scan base-package="com.example"/>
在service業務層中使用@Transaction註解便可開啟事務,事務使用見上篇
-------end-------
(五)mybatis-spring的集成