Spring事务总结(详细)

Spring事务总结(详细)

编码文章call10242025-02-24 15:12:5021A+A-

1、什么事务?

事务是一些sql序列的集合, 是多条sql, 作为一个整体执行。

mysql执行事务


beginTransaction 开启事务

insert into student() values.....

select * from student where id=1001

update school set name=xxx where id=1005

endTransaction 事务结束

2、什么情况下需要使用事务?

一个操作需要多条(2条或2条以上的sql)sql语句一起完成, 操作才能成功。

3、在程序中事务在哪说明

事务加在业务类的方法上面(public方法上面),表示业务方法执行时,需要事务的支持。

事务原本是数据库中的概念,在 Dao 层。但一般情况下,需要将事务提升 到业务层,即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。

4、不同的数据库访问技术,处理事务是不同的

1)使用jdbc访问数据库, 事务处理。

public void updateAccount(){
    Connection conn = ...
    conn.setAutoCommit(false);
    stat.insert()
    stat.update();
    conn.commit();
    con.setAutoCommit(true)
}

2)mybatis执行数据库,处理事务

public void updateAccount(){
    SqlSession session = SqlSession.openSession(false);
    try{
        session.insert("insert into student...");
    	session.update("update school ...");
    	session.commit(); 
    }catch(Exception e){
        session.rollback();
    } 
}

5、spring统一管理事务, 把不同的数据库访问技术的事务处理统一起来。

使用spring的事务管理器,管理不同数据库访问技术的事务处理。 开发人员只需要掌握spring的事务处理一个方案, 就可以实现使用不同数据库访问技术的事务管理。

管理事务面向的是spring, 有spring管理事务,做事务提交,事务回顾。

6、Spring事务管理器

Spring框架使用事务管理器对象,管理所有的事务。

事务管理器接口:
PlatformTransactionManager

作用: 定义了事务的操作, 主要是commit(), rollback()

事务管理器有很多实现类: 一种数据库的访问技术有一个实现类。 由实现类具体完成事务的提交,回顾。

意味着: jdbc或者mybatis访问数据库有自己的事务管理器实现类 :
DataSourceTranactionManager

hibernate框架,他的事务管理器实现类:
HibernateTransactionManager.


7、事务使用的AOP的环绕通知

环绕通知:可以在目标方法的前和后都能增强功能,不需要修改代码代码

spring给业务方法在执行时,增加上事务的切面功能
@Around("execution(*  所有的业务类中的方法)")
public Object myAround(ProceedingJoinPoint pjp) {
    try{
       PlatformTransactionManager.beginTransaction();//使用spring的事务管理器,开启事务
       pjp.proceed(); //执行目标方法 //doSome()
       PlatformTransactionManager.commit();//业务方法正常执行,提交事务
    }catch(Exception e){
        PlatformTransactionManager.rollback();//业务方法正常执行,回滚事务
    }
    
}

8、事务定义接口TransactionDefinition

TransactionDefinition接口。定义了三类常量, 定义了有关事务控制的属性。

事务的属性:1) 隔离级别 2)传播行为 3)事务的超时;给业务方法说明事务属性。和ACID不一样。

9、隔离级别
隔离级别:控制事务之间影响的程度。

5个值,只有四个隔离级别

1)DEFAULT : 采 用 DB 默 认 的 事 务 隔 离 级 别 。 MySql 的 默 认 为 REPEATABLE_READ;Oracle 默认为 READ_COMMITTED。

2)READ_UNCOMMITTED:读未提交。未解决任何并发问题。

3)READ_COMMITTED:读已提交。解决脏读,存在不可重复读与幻读。

4)REPEATABLE_READ:可重复读。解决脏读、不可重复读,存在幻读

5)SERIALIZABLE:串行化。不存在并发问题。


10、超时时间

超时时间,以秒为单位 。 整数值。 默认是 -1

超时时间:表示一个业务方法最长的执行时间,没有到达时间没有执行完毕,spring回滚事务。

11、传播行为,传播行为有7个值。

传播行为:业务方法在调用时,事务在方法之间的,传递和使用。

使用传播行为,标识方法有无事务。

PROPAGATION_REQUIRED

PROPAGATION_REQUIRES_NEW

PROPAGATION_SUPPORTS

以上三个需要掌握的。

1) REQUIRED: spring默认传播行为, 方法在调用的时候,如果存在事务就是使用当前的事务,如果没有事务,则新建事务, 方法在新事务中执行。

2) SUPPORTS:支持, 方法有事务可以正常执行,没有事务也可以正常执行。

3)REQUIRES_NEW:方法需要一个新事务。 如果调用方法时,存在一个事务,则原来的事务暂停。 直到新事务执行完毕。 如果方法调用时,没有事务,则新建一个事务,在新事务执行代码。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4