前言
本章节案例 使用的是声明式事务;在原来Spring-mybatis整合后的基础上进行学习事务。
一、事务分类:
-
声明式事务:AOP
-
编程式事务:需要在代码中,进行事务的管理
事务介绍:
-
一个使用 MyBatis-Spring 的其中一个主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。而不是给 MyBatis 创建一个新的专用事务管理器,MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理。
-
一旦配置好了 Spring 的事务管理器,你就可以在 Spring 中按你平时的方式来配置事务。并且支持 @Transactional 注解和 AOP 风格的配置。在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。
-
事务配置好了以后,MyBatis-Spring 将会透明地管理事务。这样在你的 DAO 类中就不需要额外的代码了。
事务标准配置
要开启 Spring 的事务处理功能,在 Spring 的配置文件中创建一个 DataSourceTransactionManager 对象:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
事 务 案 例 创 建 步 骤 如 下 :
1、根据上一章节的案例把pom.xml 文件进行环境依赖配置。
详见上一章节的spring的整合配置文件
2、新建项目,创建所需要的包名+类名(创建出来)。
3、编写实体类
这个实体类是在数据库中实际存在的一张表。
4、编写业务接口(UserMappe.xml)
5、编写UserMappe.xml的sql 语句。
6、编写业务接口实现类(这里是为了代替mybatis 的配置。使用了Spring-mybatis整合后的第二种方式,可能比较常用)
7、编写Spring的核心配置文件并且开启并配置Spring事务的支持;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:Aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/aop/spring-tx.xsd">
<import resource="applicationcontext.xml"/>
<!--bean -->
<bean id="UserMapper" class="com.ZQQQ.pojo.UserMapperimpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!--在Spring 中 配置声明式事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
<!--结合AOP 实现事务的织入 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给哪些方法配置事务 -->
<tx:attributes>
<tx:method name="adduser" propagation="REQUIRED"/>
<tx:method name="deleteuser" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="query" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置事务的切入点-->
<Aop:config>
<Aop:pointcut id="pointcut" expression="execution(* com.ZQQQ.pojo.*.*(..))"/>
<Aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</Aop:config>
8、配置Spring和mybatis 的整合文件这里命名为:applicationcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:Aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置数据源 使用Spring自带的数据源替换mybatis的配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定配置文件-->
<property name="configLocation" value="Mybatis-config.xml"/>
<property name="mapperLocations" value="UserMapper.xml"/>
</bean>
<!--SqlSessionTemplate:就是我们在mybatis 中使用的SqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="usermapper" class="com.ZQQQ.pojo.UserMapperimpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
9、编写mybatis的核心配置文件
解释:
- 编写setting 标签是代表开启驼峰命名
- 其中,typeAliases 标签允许有一个或多个 或 标签。
- typeAlias 标签用来为一个 JavaBean 指定别名,type 属性指定 JavaBean 类型,alias 属性指定别名名称。如
10、测试用例
二、Spring 中7种事务传播含义:
-----------------------------------------要克服生活的焦虑和沮丧,得先学会做自己的主人-----------------------------------------