一、Spring集成Mybatis
1、Spring负责建立datasource、sqlsessionfactory;
<!--spring 配置文件:applicationContext.xml -->
<!-- spring管理配置datasource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
<!-- spring管理配置sqlsessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource属性指定要用到的连接池-->
<property name="dataSource" ref="dataSource"/>
<!--configLocation属性指定mybatis的核心配置文件-->
<property name="configLocation" value="config/Configuration.xml"/>
</bean>
Mybatis的所有操作都基于SqlSession,而SqlSession由SqlSessionFactory产生,SqlSessionFactory又由SqlSessionFactoryBuilder来生成。但是Mybatis-Spring是基于SqlSessionFactoryBean的。
2、Mybatis的dao实现接口的使用
1)、 mybatis固定的org.mybatis.spring.mapper.MapperFactoryBean类来生成具体的dao实现类
<!--MapperFactoryBean、使用注解sql方式:创建数据映射器,数据映射器必须为接口 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例-->
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象-->
<property name="mapperInterface" value="com.test.mybatis.inter.IUserOp" />
</bean>
2)、mybatis固定的org.mybatis.spring.mapper.MapperScannerConfigurer类来自动扫描和注册Mapper接口
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定要扫描包,该包内有多个Mapper 多个包的话,用逗号隔开。 -->
<property name="basePackage" value="com.test.mybatis.inter" />
<!-- MyBatis的接口只有包含该注解,才会被扫描进去 -->
<property name="annotationClass" value="com.test.mybatis.annotation.MybatisMapper"/>
<!--指定sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
3、事务管理器 DataSourceTransactionManager
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 编程式即采用注解的方式,事务扫描开始(开启注解@Tranctional) -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false" />
二、Spring事务传播特性
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启新的事物。
2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。
3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7.(spring)PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。
三、Spring配置声明式事务(参考:https://zwllxs.iteye.com/blog/1114514)
1. 配置SessionFactory 。
2.配置事务管理器 。
3. 事务的传播特性 。
4. 那些类那些方法使用事务。