日期:2014-05-16  浏览次数:20401 次

spring 1.1.3 JDBC编程式事务管理探析(一)

一、我们一般通过下面的代码来应用事务管理:

[Java] view plain copy
  1. ? public ? void ?addEmployee(Employee?employee)? throws ?SQLException?{??
  2. ??transactionTemplate.execute(new ?TransactionCallback()?{??
  3. ????public ?Object?doInTransaction(TransactionStatus?ts)?{??
  4. ??????try ?{??
  5. ????????jdbcTemplate.update("INSERT?INTO?Employee?(username,age)?VALUES(?,??)" ,? new ?Object[]{ "lizi" , new ?Integer( 22 )});??
  6. ????????jdbcTemplate.update("INSERT?INTO?Employee?(username,age)?VALUES(?,??)" ,? new ?Object[]{ "lijun" , new ?Integer( 55 )});??
  7. ????????System.out.println("更新成功" );??
  8. ??
  9. ??????}?catch ?(Exception?ex)?{??
  10. ????????System.out.println("更新失败" );??
  11. ????????ts.setRollbackOnly();??
  12. ??????}??
  13. ??????return ? null ;??
  14. ????}??
  15. ??});??
  16. }??

事务的代码封装在了TransactionTemplate当中。接下来通过几个序列图来剖析事务的应用。

二、TransactionTemplate.execute

二、事务开始getTransaction

getTransaction完成的任务有:

  1. 从DataSource获取新的连接
  2. 将连接的autoCommit属性设置为false。
  3. TransactionSynchronizationManager将(dataSource,连接)名值对作为线程变量保存起来。
  4. Transaction对象也保存了连接的句柄

三、提交事务commit

提交事务:

  1. 调用了连接的commit方法
  2. 将(DataSource,连接)名值对从本地线程变量中删除
  3. 归还(关闭)连接

四、总结

spring jdbc的事务管理的做法与我们通常用的一致.帮我们完成了下列步骤中的1,2,4,5步。

  1. 先创建连接
  2. 再设置连接的自动提交属性为false
  3. 执行SQL语句
  4. 提交事务
  5. 关闭连接。