设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:
(1)更新客户所购商品的库存信息;
(2)保存客户付款信息--可能包括与银行系统的交互;
(3)生成订单并且保存到数据库中;
(4)更新用户相关信息,例如购物数量等等。正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。
Spring中也对事务有很好的支持,主要有XML配置和Annotation两种实现方式。Spring既实现基于JDBC事务,又实现了基于Hibernate的事务配置。
3 Spring中使用XML配置实现事务
下面通过使用一个实例来说明一下Spring中使用XML配置实现的事务,这是一个订单的实例,这个实例是基于Hibernate实现的事务。实现的业务是向数据库中插入一个订单和订单明细数据项操作。
3.1 DAO对象及其接口 为了专注于讲述事务的配置,在这里业务接口只设计插入记录的insertItem和insertOrder方法: IItemDAO.java//订单明细插入接口
package com.trx.db.dao;
public interface IItemDAO {
public void insertItem(Item item); //其中Item是一个ORM的POJO类
}
IOrderDAO.java//订单明细插入接口
package com.trx.db.dao;
import com.trx.db.entity.Order;
public interface IOrderDAO {
public void insertOrder(Order order); //其中Order是一个ORM的POJO类
}
|