Spring学习笔记三—抽象事务模型

1.事务Transaction

⑴ 原子性(Atomicity)

  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

⑵ 一致性(Consistency)

  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

⑶ 隔离性(Isolation)

  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

⑷ 持久性(Durability)

  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

2.通过JDBC API实现事务

 @Test
    public void testTX(){
        String url = "jdbc:mysql://127.0.0.1:3306/daily_report";
        String username = "root";
        String password = "1234";

        String sourceUserId = "leo";
        String desUserId = "xnn";
        int money = 500;

        Connection connection = null;
        try {
            //1.加载数据库驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //获得数据库连接
            connection = DriverManager.getConnection(url, username, password);
            //开启事务
            connection.setAutoCommit(false);//如果为true的话,sql语句会分别执行,修改数据库;如果为false的话,会激活事务

            //多条数据操作数据
            Statement sql = connection.createStatement();
            sql.executeUpdate("UPDATE user_info SET balance = balance-" + money + " WHERE user_id = '" + sourceUserId+"'");
            sql.executeUpdate("UPDATE user_info SET balance = balance+" + money + " WHERE user_id = '" + desUserId+"'");
            //提交事务
            connection.commit();

        } catch (SQLException e) {
            e.printStackTrace();
            try{
                //回滚
                connection.rollback();
            }catch (SQLException ex){
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

3.Spring抽象事务

每种数据访问技术都有事务机制,它们各自提供了API来开启新事务,当数据库操作完成后,提交事务,或者在发生错误异常时,回滚事务,该过程称为事务划分。Spring事务就是从代码中抽象出不同的事务划分步骤,并以编程的方式或者声明的方式提供一个标准的API来划分事务。

try{

//1.开启事务
//2.执行数据库操作

//3.提交事务

}catch(Exception ex){

//处理异常
//4.回滚事务

}finally{

//关闭连接,资源清理
}

4.Spring抽象事务模型

Spring抽象事务模型基于接口 PlatformTransactionManager,该接口有不同的具体实现,每种实现都对应一个特定的数据访问技术。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值