spring 1.1.3 JDBC编程式事务管理探析(一)
    
一、我们一般通过下面的代码来应用事务管理:
- 
?
public
?
void
?addEmployee(Employee?employee)?
throws
?SQLException?{??
 
- 
??transactionTemplate.execute(new
?TransactionCallback()?{??
 
- 
????public
?Object?doInTransaction(TransactionStatus?ts)?{??
 
- 
??????try
?{??
 
- 
????????jdbcTemplate.update("INSERT?INTO?Employee?(username,age)?VALUES(?,??)"
,?
new
?Object[]{
"lizi"
,
new
?Integer(
22
)});??
 
- 
????????jdbcTemplate.update("INSERT?INTO?Employee?(username,age)?VALUES(?,??)"
,?
new
?Object[]{
"lijun"
,
new
?Integer(
55
)});??
 
- 
????????System.out.println("更新成功"
);??
 
- 
??
 
- 
??????}?catch
?(Exception?ex)?{??
 
- 
????????System.out.println("更新失败"
);??
 
- 
????????ts.setRollbackOnly();??
 
- 
??????}??
 
- 
??????return
?
null
;??
 
- 
????}??
 
- 
??});??
 
- 
}??
 
 
事务的代码封装在了TransactionTemplate当中。接下来通过几个序列图来剖析事务的应用。
二、TransactionTemplate.execute

二、事务开始getTransaction

getTransaction完成的任务有:
- 从DataSource获取新的连接
 
- 将连接的autoCommit属性设置为false。
 
- TransactionSynchronizationManager将(dataSource,连接)名值对作为线程变量保存起来。
 
- Transaction对象也保存了连接的句柄
 
三、提交事务commit

提交事务:
- 调用了连接的commit方法
 
- 将(DataSource,连接)名值对从本地线程变量中删除
 
- 归还(关闭)连接
 
四、总结
spring jdbc的事务管理的做法与我们通常用的一致.帮我们完成了下列步骤中的1,2,4,5步。
- 先创建连接
 
- 再设置连接的自动提交属性为false
 
- 执行SQL语句
 
- 提交事务
 
- 关闭连接。