码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
        • 在这里插入图片描述

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

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

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

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

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

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

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

      • 同成功同失败!!!

  • 相关阅读:
    基于springboot+vue的电动车实名制挂牌管理系统 elementui
    影响多用户商城系统价格的因素有哪些?
    若依使用EasyExcel导入和导出数据
    SpringCloud无介绍快使用,sentinel注解@SentinelResource的基本使用(二十三)
    谷粒商城 高级篇 (十五) --------- 登录与注册
    个人开发 App 最简单方法:使用现代开发工具和平台
    小黑跑步碰到了北邮女学霸,全马比我还快20分钟,同时崇拜我校学弟让我倍感羡慕的leetcode之旅:1379. 找出克隆二叉树中的相同节点
    代码随想录算法训练营第50天|123. 买卖股票的最佳时机 III,188. 买卖股票的最佳时机 IV
    新型PC模拟器外挂肆虐,游戏安全攻防再升级
    Qt 非圆角图片裁剪为圆角图片
  • 原文地址:https://blog.csdn.net/ALVIS_108/article/details/126612002
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号