接着上文 java 代码样式为什么需要事务,讲述Spring5事务几种方式 认识API

下面 我们就来继续事务操作 我们重点使用声明式 本文叫大家用注解方式实现

首先 我们要在配置文件中 配置一个事务管理器

在bean.xnl最下面添加如下配置

<!-->配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref= "dataSource"></property>
  </bean>

因为我们用的是Jdbc 就要用到对应的类 然后下面set需要注入一个数据源 这上面就是我们配置的一个数据源

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_spring

第二部 在bean.xml中声明一个命名空间 叫 tx

xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_事务管理_02


最后 在bean.xml最下面方 添加代码如下

<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

开启事务注解 这里 需要一个事务管理器 正好上面 我们刚声明了一个 用到了我们刚引入的tx命名空间

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_mybatis_03

然后 我们将 senvice层下的transfAccoSenvice类加上注解

import org.springframework.transaction.annotation.Transactional;
@Transactional

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_spring_04


类的顶上 加了一个 Transactional

这个注解代表的就是事务 可以加给类 也可以加给方法 加给类表示 整个类中所有的方法都会被添加事务

加给方法 那就是 这个方法会带有事务

非常的方便

我们打开数据库表 看一下两者的余额

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_spring_05


然后 我们运行测试类代码 运行结果如下

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_spring_06


还是 第一段sql执行成功了 然后 异常了 然后 我们会数据库去刷新一下表 再重新打开

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_spring_07


可以看到 这次 李四并没有做冤大头 余额大家的都没有扣

说明我们的事务已经成功了

大家可能会想 是不是因为异常 所以都没变呢 但控制台明显看到 第一段减少的sql是执行完了的 而且控制台也输出了李四减完的余额11200.0
是因为 异常触发了事务回滚 数据都还原了

然后 我们将 senvice层下的transfAccoSenvice 中的 transferAccounts方法 修改如下

//转账方法
public void transferAccounts(int sponsorId, int recipientId, double money){
    Boolean paym = pay(money,sponsorId);
    if(paym){
        income(money,recipientId);
        System.out.println("交易完成");
    }
}

我们去掉了会报异常的 int i = 10/0;

再次运行测试类

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_事务管理_08


显然 我们这次的代码就完全运行成功了

到数据库刷新表 然后查看

什么时候需要在Java方法上加上事务注解开启事务 java怎么开启事务注解_java_09


可以看到 全部操作成功 事务也就提交啦