2007年1月6日星期六

学习Spring的事务管理(二)

用代码控制实现事物管理的另一种方式,就是通过使用TransactionTemplate模板类,TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。和JdbcTemplate一样,它使得我们无需在琐碎的try/catch/finally代码中徘徊---也就是为我们省去了部分事务提交、回滚代码。

将上面的用户信息插入方法修改成下面这样:

TransactionTemplate类的构造器需要一个TransactionCallback接口类型的参数,而抽象类TransactionCallbackWithoutResult实现了TransactionCallback接口,抽象类TransactionCallbackWithoutResult中有一个()方法,该方法以 为参数。所以就有了下面的用内部类的实现方式。

public boolean doUpdateUserInfo(UserInfoVO oneUserInfo)

    {

        //定义两个sql插入语句

        String sql = "update userinfo set userPassword=? where userName=?";

        String sql2 = "update userinfo1 set userPassword=? where userName=?";

 

    TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

    transactionTemplate.execute(new TransactionCallbackWithoutResult()

               {

                  public void doInTransactionWithoutResult(TransactionStatus status)

                  {

                     this.jdbcTemplate.update(sql, new Object[]

                                     {oneUserInfo.getUserName(),

                                     oneUserInfo.getUserPassword()});

                      this.jdbcTemplate.update(sql2, new Object[]

                                     {oneUserInfo.getUserName(),

                                     oneUserInfo.getUserPassword()});

                  }

              });

 

       return true;

    }

这种方式,代码量少,少了try/catch/finally语句,全部被封装在了TransactionTemplate类里面,以内部类方式实现可能降低了代码的可读性。

没有评论:

发表评论