JAVA事务管理
在JAVA中有两类事务,如果是JDBC类型事务,则是由Connection类来控制的。如果创建一个Connection对象时,没有显示调用setTransactionIsolation(int level)方法,则Connection使用当前数据库默认的事务格力级别,数据库的默认隔离级别可由响应的SQL语句查询到(在MySQL中可使用 select @@tx_isolation;)
MyBatis事务管理
1、MyBatis中,提供了JDBC和MANAGED两种配置属性来配置事务的类型。这两种事务管理器的实现,都是针对JDBC事务的事务管理器(非JTA事务)。
其中Transaction接口如下:
这些接口实际是对Connection类进行了包装。在ManagedTransaction类的commit和rollback方法没有具体实现,而是交由外部容器去管理事务的提交和回滚,外部容器(Spring容器或EJB容器)通过声明式事务的方式进行管理
2、Mybatis中通过TransactionIsolationLevel类来定义事务级别,如下:
public enum TransactionIsolationLevel {
//不支持事务
NONE(Connection.TRANSACTION_NONE),
//会发生dirty read|non-repeatable read|phantom read
READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),
//会发生non-repeatable|phantom read
READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),
//会发生phantom read
REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),
SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);
}
3、MyBatis只是对JDBC事务提供了事务管理器的封装,如果想要使用JTA事务,则需要自行实现Transaction接口。Spring框架对此也提供了支持。
该系列文章参考如下书籍及文章:
《Java Persistence with MyBatis 》
《http://www.cnblogs.com/hzhuxin/p/3349836.html》
《http://www.iteye.com/topic/1112327》
《http://www.iteye.com/blogs/subjects/mybatis_internals》
《http://denger.me/2011/05/mybatis-and-spring-interface-integrated/》