Day 94

_Spring技术–事务处理

  1. 事务作用:在数据层保障一系列的数据库操作同成功同失败

  2. Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

  3. 需求:实现任意两个账户间转账操作

    • 需求微缩:A账户加钱,B账户减钱
    • 分析:
      • 数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney)
      • 业务层提供两个账号和操作金额执行转账操作
      • 基于Spring整合Mybatis环境搭建上述操作
  4. 结果分析:

    • 程序正常执行,账户金额A减B加,没有问题
    • 程序出现异常后,转账失败,但是异常之前的操作成功,异常之后的操作失败,整体业务失败
  5. 首先来看样例:

    • 在spring的整体大框架中,实例代码的结构如图所示:在这里插入图片描述

    • 再来看数据库表中两个人的账户余额:在这里插入图片描述

    • 正常情况下将老王的钱转账500给张三

      • package com.Alvis;
        
        import com.Alvis.config.SpringConfig;
        import com.Alvis.service.FundsService;
        import org.junit.Test;
        import org.junit.runner.RunWith;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.annotation.AnnotationConfigApplicationContext;
        import org.springframework.test.context.ContextConfiguration;
        import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
        
        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration(classes = SpringConfig.class)
        
        public class ServiceTest {
            @Test  // 测试转账方法
            public void transferMoney() {
                ApplicationContext apc = new AnnotationConfigApplicationContext(SpringConfig.class);
                FundsService fundsService = apc.getBean(FundsService.class);
                fundsService.transfer(500);
            }
            
        }
        ================================================
        转帐前:
        Property{id=1, name='老王', property=1000}
        Property{id=2, name='张三', property=1000}
        转账后:
        Property{id=1, name='老王', property=500}
        Property{id=2, name='张三', property=1500}
        
        进程已结束,退出代码0
        
      • 在这里插入图片描述

      • 但是如果程序中出错,就会只执行了老王转账的操作,并没有执行张三收钱的操作:在这里插入图片描述

      • 执行后的结果为:在这里插入图片描述

    • 解决办法:进行事务管理(三步走)

      • 第一步:在SpringConfig中注解开启事务,告诉Spring有事务需要开启:在这里插入图片描述

      • 第二步:在接口注解需要开启事务的方法:在这里插入图片描述

      • 第三步:在JdbcConfig中对事务管理的第三方的配置进行bean管理,具体来说就是创建新的Bean:在这里插入图片描述

    • 加上事务管理之后再次运行程序:在这里插入图片描述

    • 同成功同失败!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值