Mybatis实现【5】--事务概述

本文深入探讨了Java中JDBC事务管理的基本原理,并详细介绍了MyBatis框架如何通过Transaction接口和TransactionIsolationLevel类进行事务级别的定制。重点阐述了MyBatis事务管理器的工作机制,包括ManagedTransaction类的实现以及如何通过Spring或EJB容器进行事务的声明式管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA事务管理

在JAVA中有两类事务,如果是JDBC类型事务,则是由Connection类来控制的。如果创建一个Connection对象时,没有显示调用setTransactionIsolation(int level)方法,则Connection使用当前数据库默认的事务格力级别,数据库的默认隔离级别可由响应的SQL语句查询到(在MySQL中可使用 select @@tx_isolation;)

MyBatis事务管理

1、MyBatis中,提供了JDBC和MANAGED两种配置属性来配置事务的类型。这两种事务管理器的实现,都是针对JDBC事务的事务管理器(非JTA事务)。

麦库截图20141716170635450.jpg 

其中Transaction接口如下:

麦库截图20141716170815243.jpg 

这些接口实际是对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/》





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值