ibatis DAO 事务探索

ibatis DAO 框架提供了事务管理模块。而这个事务管理可以应用到很多场合,包括JDBC、Hibernate、JTA、SQLMAP等。
下面以最简单的JDBC来分析一下其如何实现事务管理。
首先来看一段代码:

 

在method()方法里有着两个事务,如果在方法里不显式的调用daoManager.startTransaction(),则每个DAO的一次方法调用就是一个独立的事务。
  ibatis DAO事务,有两个核心接口DaoTransactionManager和DaoTransaction
  对应着不同的数据库持久层实现,两个接口分别对应着不同实现
  查看ibatis 代码,可以发现这些manager实现事务,就是调用事务源的事务操作方法

JdbcDaoTransactionManager

 

 
 JdbcDaoTransaction

 

 那么DaoTransactionManager以什么依据处理事务呢?DaoTransactionState看看DaoTransactionState的代码,非常简单,四个常量来表示事务处于的不同的状态

  public static final DaoTransactionState ACTIVE = new DaoTransactionState();
  
public static final DaoTransactionState INACTIVE = new DaoTransactionState();
  
public static final DaoTransactionState COMMITTED = new DaoTransactionState();
  
public static final DaoTransactionState ROLLEDBACK = new DaoTransactionState(); 

 

那么实际程序中是如何控制事务的呢
  在第一段代码中,我们是这样取得DAO
  orderDao = (OrderDao) daoManager.getDao(OrderDao.class);
  实际daoManager返回的并不是orderDao的具体实现类,它返回的DaoProxy

 

DaoProxy

 

看到这段代码就非常清楚了,每调用DAO的一次方法时,如果不显式的调用daoManager.startTransaction(),就会成为单独的一个事务。再看看ibatis为我们提供的摸板JdbcDaoTemplate

 

 

ibatis控制多个DAO的事务实际是让这些DAO共用了一个DaoTransaction(ThreadLocal),一个Connection

 

 

注:下面这些包并不一定是该文章中的

使用到的包
hsqldb-1.8.0.5.jar
ibatis-common-2.1.5.582.jar
ibatis-dao-2.1.5.582.jar
ibatis-sqlmap-2.1.5.582.jar
log4j-1.2.12.jar
spring-2.0.1.jar
commons-logging-1.0.4.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值