mybatis-spring官网:http://mybatis.org/spring/zh/transactions.html
参考Spring整合Mybatis这篇文章,这个测试,主要就是在这篇文章上加一些东西。
首先是在spring-dao.xml这个配置文件上增加如下的东西
<tx:method name “*” propagation=“REQUIRED”>
* :表示所有方法
Spring中七种Propagation类的事务属性详解
- **REQUIRED:**支持当前事务,如果当前没有事务,就新建一个事务。 这是最常见的选择,是Spring的默认选项
- **SUPPORTS:**支持当前事务,如果当前没有事务,就以非事务方式执行。
- **MANDATORY:**支持当前事務,如果当前没有事務,就抛出异常。
- **REQUIRES_ NEW:**新建事务,如果当前存在務,把当前事务挂起。
- **NOT_ _SUPPORTED:**以啡事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- **NEVER:**以非事务方式执行,如果当前存在事务,则抛出异常。
- **NESTED:**支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。
然后在实体类接口上增加两组业务分别是增加、删除
配置UserMapper.xml文件,在这里我们要模拟出现错误的情况。(我们现在把增加、删除和查询 组合成一组业务)在这里我们先把删除语句写错,并且不开启事务。我们来看一下,增加的用户是否被增加进去了。
先看一下数据库原先的数据为:
然后把mybatis整合给Spring,让Spring托管
此时我们进行测试可以发现7号用户被增加进去了,但是6号用户并没有被删除,这样显然不符和我们的要求,因为删除、增加属于同一组业务,它们要不都成功,要不都失败,不可能出现一个成功,一个失败。
下边我们开启事务再看一下,此时我们会发现7号用户并没有被添加进去,6号用户也没有被删除。因为我们的删除语句出现了错误,而它们两个属于同一组业务,删除失败,从而导致增加业务也没有成功
最后我们把删除与语句改正确,我们再来看一下,我们的两组业务是否成功。我们会发现,删除和增加两组业务都成功了。