首页 > 其他分享 >Spring-事务操作

Spring-事务操作

时间:2023-08-17 10:34:48浏览次数:40  
标签:salary 事务 Spring update eid 操作 public conn

   1、什么是事务

          事务就是一系列的动作,它们被当作一个单独的工作单元,这些动作要么全部完成,要么全部不起作用。

        案例:转钱业务

          扣钱和加钱  --要么都执行要么都不执行

        JDBC  --它模式事务自动提交的

            -当代码中出现错误,转账业务就会变成eid=1的用户扣钱,eid=2的用户没有加钱,扣的钱不翼而飞了

public class Test {
    public static void main(String[] args)  {
        Connection conn=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/incast?serverTimzone=Asia/Shanghai", "root", "123456");        
            PreparedStatement statement = conn.prepareStatement("update emp set salary=salary-100 where eid=1");
            statement.executeUpdate();
            int i = 10 / 0;
            PreparedStatement statement1 = conn.prepareStatement("update emp set salary=salary+100 where eid=2");
            statement1.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
      
        }
    }

      解决方法:当代码运行错误点时事务会返回代码执行前         

public class Test {
    public static void main(String[] args)  {
        Connection conn=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/incast?serverTimzone=Asia/Shanghai", "root", "123456");
            conn.setAutoCommit(false);//设置事务手动提交
            PreparedStatement statement = conn.prepareStatement("update emp set salary=salary-100 where eid=1");
            statement.executeUpdate();
            int i = 10 / 0;//错误点
            PreparedStatement statement1 = conn.prepareStatement("update emp set salary=salary+100 where eid=2");
            statement1.executeUpdate();
            conn.commit();//事务提交
        } catch (Exception e) {
            e.printStackTrace();
            try {
            conn.rollback();//事务回滚
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
        }finally {
        }
    }
}

   2、如何实现Spring事务

          Spring框架一定会提供一个事务切面类。

            (1) 前置通知--开启手动事务

            (2) 后置返回通知【事务提交】

            (3) 异常通知【事务回滚】

         serviceImpl:  

@Service
public class EmpServiceImpl implements Empservice {
    @Autowired
    private EmpDao empDao;
    @Transactional//该方法交于spring的事务来管理了---默认spring不识别该注解
    @Override
    public void update(int eid, int uid, double money) {
        /*1、扣钱*/
        empDao.update(eid,-money);
        int c=1/0;
        /*2、收钱*/
        empDao.update(uid,money);
    }
    /*事务管理:(1)自己写事务管理 --自己手动定义事务切面类
    *          (2)使用spring提供的事务切面类
    * */
}

       Spring。xml

         

      pom.xml

        

 

标签:salary,事务,Spring,update,eid,操作,public,conn
From: https://www.cnblogs.com/PHOEDE/p/17636931.html

相关文章

  • Spring-Aop
       1、面向切面编程Aspect,通过预编译方式和运行期间动态代理实现程序的统一维护的一种技术    2、AOP应用场景        (1)记录日志        (2)权限校验        (3)Spring事务管理   3、AOP的结构        AOP要做的三件事,在哪里切入,......
  • MySQL基本命令及基本操作
    MySQL数据库基本操作原创 Cloud研习社 Cloud研习社 2023-08-1210:33 发表于山东收录于合集#一站式教程274个#计算机248个#mysql8个#linux292个#云计算285个教程每周二、四、六更新基本操作有:查看有哪些数据库、查看有哪些表、创建数据库、创建表、查看表信息、......
  • javaSpring操作事务
    1.什么是事务简单理解你:事务就是将一系列动作看成是一次工作单元,又涉及到套娃了举个栗子:转账操作,张三向李四转账100块钱,在转账途中,突然停电,但是账单已经发出去了,这个时候如果没有事务的话,那么张三向李四转账的100块钱将不翼而飞事务的作用,将张三和李四的的转账看成一个动作,要......
  • SpringBoot3集成RocketMq
    标签:RocketMq5.Dashboard;一、简介RocketMQ因其架构简单、业务功能丰富、具备极强可扩展性等特点被广泛应用,比如金融业务、互联网、大数据、物联网等领域的业务场景;二、环境部署1、编译打包1、下载5.0版本源码包rocketmq-all-5.0.0-source-release.zip2、解压后进入目录,编......
  • Redis 实现库存扣减操作
    在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还......
  • Linux 操作必备 150 个命令,速度收藏~
    nux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。Linux命令功能说明线上查询及帮助命令(2个)man查看命令帮助,命令的词典,更复杂的......
  • Spring事物
    一、什么是事务?事务:一系列执行SQL语句的操作,它被当作一个单独的工作单元,这些操作要么全部完成,要么全部不起作用。二、事务的四大特征1、原子性(Atomicity)一个事务是不可分割的最小工作单位执行事务,要么全部成功,要么回滚到执行事务之前的状态。2、一致性(Consistency)事务......
  • MySQL事务
    ACID原子性(Atomicity)隔离性(Isolation)一致性(consistency)持久性(Durability)当把现实世界的状态转换映射到数据库世界时,持久性意味着该转换对应的数据库操作所修改的数据都应该在磁盘上保留下来,不论之后发生了什么事故,本次转换造成的影响都不应该被丢失掉事务​是一个......
  • 聊一下操作系统 macOS 与 Linux
    对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显。但对于macOS和Linux的比较不太多,很多人认为它们很相似,因为这两种操作系统都可以运行Unix命令。其实详细比较下,两者还是有很多不同点的,每种操作系统都是独一无二的存在,下面就让我们......
  • SpringBoot3集成RocketMq
    标签:RocketMq5.Dashboard;一、简介RocketMQ因其架构简单、业务功能丰富、具备极强可扩展性等特点被广泛应用,比如金融业务、互联网、大数据、物联网等领域的业务场景;二、环境部署1、编译打包1、下载5.0版本源码包rocketmq-all-5.0.0-source-release.zip2、解压后进入目录,......