Mybatis的事务管理:
什么是事务:
一个业务可能要对数据库进行一系类列的访问,这一系列访问可能会修改多条数据
记录这一系列修改应该是一个整体,也就是说多个数据库原子访问应该绑定成一个整体,这就
是事务事务是一个最少的逻辑执行单元,要么同时执行,要么同时放弃执行。
事务的四大特性:
原子性(Atomicity):事务是应的最小逻辑执行体,具有不可再分的特性
一致性(Consistency):事务执行的结果必须使数据库从一种一致性状态变到另一种一致性状态,对于
一致性的理解,我认为:当一系列操作作为一个事务时,其执行体在逻辑层面要求
执行的内容变化合乎本身的代码逻辑设定。以转账为例,在没有转账之前"我"认为
是一种一致性的状态,当转账时,那么"我"就认为你的账户减钱他的账户加钱后达
到的状态是另一种一致性,那么要达到另一种一致性就需要执行体完全执行,所以
事务的一致性需要"原子性"保证!
一致性这个词放在事务上说似乎有些晦涩、抽象,我认为他只是人为的思想上
认为的一致性而已。
隔离性(Isolation):事务之间的执行互不干扰,即并发执行的事务间不能互相影响
持续性(Durability):也称持久性(Persistence),事务一旦提交,事务对数据所进行的修改将持久在
数据库。
Mybatis事务管理机制分为两种:
使用JDBC的事务管理机制:
使用Connection对象完成对事务的提交、回滚、关闭
使用MANAGED的事务管理机制:
这种机制Mybatis什么也不做,而是让容器来实现对事务的管理
Transaction接口,Mybatis事务设计的重点:
1.对数据库的事务来说,应该具有创建、提交、回滚、关闭这几个动作。
2.Mybatis将事务抽象为Transaction这个接口,它的两个实现类:JdbcTransaction和
ManagedTransaction。对于这两个实现类Mybatis提供了TransactionFactory接口,
TransactionFactory有两个实现类:JdbcTransactionFactory和
ManagedTransactionFactory,用来获取事务实例。
Transaction接口
JdbcTransaction实现类
ManagedTransaction实现类
TransactionFactory接口
JdbcTransactionFactory实现类
ManagedTransactionFactory实现类
Transaction的实现可通过上面的对应工厂来获取!
3.对比JdbcTransaction和ManagedTransaction都做了什么?
JdbcTransaction
底层利用原始的事务管理机制,依赖于从dataSource获取的连接connection来实现
的管理,JdbcTransaction只不过是对java.sql.Connection事务处理简单封装。
ManagedTransaction
ManagedTransaction的事务是交给容器来做的,他自己啥也没有,即没有实质的
事务控制力,它的commit()、rollback()方法里面写的是do noting!
|