事务处理介绍

一.什么是事务

 在mysql中,提出了事务,事务是指一组sql语句的集合,集合中有多条sql语句
 可能是insert,update,select,delete,我们希望这些多个sql语句都能成功,
 或者都失败,这些sql语句的执行是一致的,作为一个整体执行。

二.在什么时候要用到事务

当我们的操作涉及到多个表,或者是多个sql语句的增加insert删除delete修改update的时候,需要保证这些语句都是成功才能完成我们的功能;或者保证这些语句都失败,保证操作是符合要求的。最明了的例子就是转账,从A账户转到B账户中,要保证从A中扣除的金额一定要加到B里去。如果A到B转账成功,那么A扣B加,要保证A和B的账户是均衡的。如果A向B转账的过程中扣款失败了,那就应该把操作都回退,A也不扣,B也不加,保证A和B中账户数据的平衡。

三.使用mybates访问数据库,还是JDBC访问数据库

JDBC访问数据库,处理事务:连接对象Connection conn;事务提交 conn.commit ();事务回滚:conn.rollback ();

Mybatis 访问数据库,处理事务:事务提交:SqlSession.commit ();事务回滚:SqlSession.rollback ();

四.事务的四大特性

1.原子性

事务的原子性是指事务全部提交成功或者提交失败,全部回滚,不会执行其中的一部分。

2.一致性

事务在执行前后,数据库都处于一致状态,即事务的执行不会破环数据库数据的一致性和完整性。如事务未处理完成的过程中数据库故障,事务未完成就被迫中断,未完成的事务对数据库的所作的修改写入,这时数据库就处于一种不一致的状态。

3.隔离性

事务的隔离性是值在并发环境下,并发的事务是相互隔离的,一个事务的执行不能被另外的事务干扰。不同的事务并发操作数据时,每个事务都在自己的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。

不同的隔离级别对事务的处理不同,分别是:未授权读取(最低级别,以上问题均无法解决),授权读取(读已提交,可避免脏读情况发生),可重复读取(确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题)和串行化 (最严格的事务隔离级别,要求所有事务被串行执行,不能并发执行,可避免脏读、不可重复读、幻读情况的发生)。

扫描二维码关注公众号,回复: 15497613 查看本文章

4.持久性

一旦事务提交,数据库中对应数据的更改就会永久保存到数据库中。即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态

五.事务处理中所存在的不足

1.不同的数据库访问技术,处理事务的对象,方法不同。JDBC使用的是Connection对象,Mybatis访问对象使用的事SqlSession。方法不同就需要了解不同数据库访问技术使用事务的原理。

2.掌握多种数据库中事务的处理逻辑,知道什么时候提交,什么时候回滚。

六.解决事务处理所存在的不足

spring提供了一种处理事务的统一模型,能使用统一的步骤,方式,完成多种不同数据库访问技术的事务处理。

使用spring的事务处理机制,可以完成MyBatis访问数据库的事务处理。

使用spring的事务处理机制,可以完成Hibernate访问数据库的事务处理。

七.Spring 事务管理器

在 Spring 框架中提供了多种事务管理器来进行事务管理。Spring 的事务管理器是基于AOP 实现的。在 Spring 的事务管理器中包含了配置事务传播行为、隔离级别、只读和超时属性,这些属性提供了事务应用的方法和描述策略。
在 Java EE 项目开发经常会使用分层模式,Spring 的事务处理位于业务逻辑层,它提供了针对事务的解决方案。
1.Spring的事务管理接口

在 Spring 的事务模块(spring-tx-5.2.7.RELEASE.jar)中包括事务管理的三个核心接口。

(1).PlatformTransactionManager 接口

PlatformTransactionManager 接口是 Spring 提供的事务管理器接口,用于管理事务。Spring 将事务的配置详细信息封装到 TransactionDefinition 对象中,然后通过事务管理器的getTransaction() 方法获得事务的状态(TransactionStatus),并对事务进行下一步的操作。

该接口中提供了三个事务操作方法,具体如下:

(2).TransactionDefinition 接口

TransactionDefinition 接口是事务定义(描述)的对象,它提供了事务相关信息获取的方法,其中包括五个操作,具体如下:

(3). TransactionStatus 接口

TransactionStatus 接口是事务的状态,它描述了某一时间点上事务的状态信息。其中包括六个操作,具体如下:

 

八. 总结spring的事务

  1. 管理事务的是事务管理器及其实现类。
  2. Spring的事务是一个统一管理模型:
  • 指定要使用的事务管理器的实现类,使用xml配置文件中的标签
  • 指定哪些类,哪些方法需要加入事务的功能
  • 指定方法需要的隔离级别,传播行为和超时时间

我们需要告诉Spring我们的项目中类信息,方法的名称,方法的事务传播行为。

猜你喜欢

转载自blog.csdn.net/AMYCX/article/details/130087374