一、我们一般通过下面的代码来应用事务管理:
- 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语句
- 提交事务
- 关闭连接。