SpringMVC的事务配置以及使用

自己学习然后搭建了一个Spring+SpringMVC+Mybatis的框架,然后实现事务

这里是事务的配置



<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    
    <property name="validationQuery" value="${validationQuery}" />
    ......
bean>



<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
bean>


<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        
        <tx:method name="insert*" propagation="REQUIRED" />
        <tx:method name="update*" propagation="REQUIRED" />
        <tx:method name="delete*" propagation="REQUIRED" />
        
        <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
        <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
        <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
    tx:attributes>
tx:advice>



<aop:config>
    <aop:pointcut id="transactionPointcut" expression="execution(* com.sanguo.service.impl..*Impl.*(..))" />
    <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
aop:config>

如果不会配置的可以自己在网上找其他博客,里面有详细配置ssm项目的配置,在这里推荐一个
http://blog.csdn.net/gebitan505/article/details/44455235/

配置好之后写了个测试类去实验一下

public int insertList(List userList) {

        for (User user : userList) {
            userMapper.insert(user);
        }

        return 1;
 }

SpringMVC的事务配置以及使用_第1张图片
SpringMVC的事务配置以及使用_第2张图片
第一次运行插入list里面的user数据没有问题,因为这个没有异常,可以很好的运行下去,主键也自动增加了5个
之后我就想在程序运行出现异常看看能否完成插入,看看数据能不能回滚

public int insertList(List userList){

        for (User user : userList) {
            userMapper.insert(user);
        }
        int s = 1 / 0;
        return 1;
    }

这次我写了一个“1/0”,这样运行就会出错,这样让程序出错看看能否增加成功

SpringMVC的事务配置以及使用_第3张图片
SpringMVC的事务配置以及使用_第4张图片

这次可以看见主键确实是增加了,但是数据确没有添加成功,说明事务确实是配置成功了

但是我听说事务成功需要把异常去抛出来,于是我试了一下把异常捕获,然后解决看一下

public int insertList(List userList){

       for (User user : userList) {
            userMapper.insert(user);
        }
        int s = 0;
        try {
            s = 1 / 0;
        } catch (Exception e) {
            // 捕获了异常,并把异常信息打印
            e.printStackTrace();   
        }
        return 1;
    }

在运行的时候把这个会出现异常的代码try-catch,然后去运行

SpringMVC的事务配置以及使用_第5张图片
SpringMVC的事务配置以及使用_第6张图片

SpringMVC的事务配置以及使用_第7张图片

看到,控制台确实有异常,并且也打印出了结果,把异常捕获之后,确实可以插入成功

然后我再尝试把异常给抛出去看看能够添加成功不,于是又改造了一下方法

public int insertList(List userList) throws  Exception{

       for (User user : userList) {
            userMapper.insert(user);
        }
        int s = 0;
        try {
            s = 1 / 0;
        } catch (Exception e) {
            e.printStackTrace(); 
            throw e;// 抛出异常
        }
        return 1;
    }

SpringMVC的事务配置以及使用_第8张图片

SpringMVC的事务配置以及使用_第9张图片

可以看到主键增加了,但是数据库数据并没有增加,说明事务确实成功

总结:

事务配置确实是有用的,但是在使用事务的时候,需要在某个service中去把异常抛出来,不能去try-catch的解决它,只有在service中抛出来然后又异常,事务才能够真正的起作用。

你可能感兴趣的:(学习笔记)