通常来讲,事务具备4个特性:
原子性:事务是应用中最小的执行单位,就如原子是自然界最小颗粒,具有不可再分的特征一样。
一致性:事务执行的结果,必须使数据库从一种一致性状态,变到另一种一致性状态。
隔离性:各个事务的执行互不干扰,任意一个事物的内部操作对其他并发的事务,都是隔离的,即并发执行的事务之间不会互相影响。
持续性:事务一旦提交,对数据所做的任何改变都要记录到永久存储器中,通常就是保存到物理数据库。
Transaction接口
Transaction接口有两个实现类,分别是JdbcTransaction和ManagedTransaction。同时MyBatis还设计了TransactionFactory接口和两个实现类JdbcTransactionFactory和ManagedTransactionFactory用来获取事务的实例对象。
对数据库的事务而言,应该具有以下几个动作:创建、提交、回滚、关闭。MyBatis将事务抽象成了Transaction接口。该接口的源代码如下:
public interface Transaction{
//获取数据库连接
Connection getConnection() throws SQLException;
//提交
void commit() throws SQLException;
//回滚
void rollback() throws SQLException;
//关闭数据库连接
void close() throws SQLException;
}
MyBatis的事务管理分为两种形式:
使用JDBC的事务管理机制:利用java.sql.connection对象完成对事务的提交、回滚、关闭等操作。
使用Managed的事务管理机制:对于这种机制,MyBatis自身不会去实现事务管理,而是让容器实现对事务的管理。
事务的配置创建和使用
一般会在mybatis-config.xml中定义类似如下的信息:
<environments default="mysql">
<environment id="mysql">
<!-- 指定事务管理类型 -->
<transactionManager type="jdbc"/>
<!-- 配置数据库连接 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>