(五)mybatis-spring的集成
mybatis-spring的集成
在src下新建applicationContext.xml
配置内容:数据源、SqlSessionFactory、Mapper、事务处理
一、配置SqlSessionFactory
需要两个参数:数据源和Mybatis的配置文件路径
这样SpringIOC容器就会初始化这个SqlSessionFactoryBean,解析Mybatis配置文件连同数据源一同保存在SpringBean里
1 <!-- 配置数据源 --> 2 <context:property-placeholder location="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-------