Java web----Service事务

在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础!

1 DAO中的事务

public void xxx() {
   Connection con = null;
   try {
      con = JdbcUtils.getConnection();
      con.setAutoCommitted(false);
      QueryRunner qr = new QueryRunner();
      String sql = …;
      Object[] params = …;
      qr.update(con, sql, params);
      
sql = …;
      Object[] params = …;
      qr.update(con, sql, params);
      con.commit();
} catch(Exception e) {
    try {
       if(con != null) {con.rollback();}
} catch(Exception e) {}
} finally {
    try {
       con.close();
} catch(Exception e) {}
}
}

2 Service才是处理事务的地方

我们要清楚一件事,DAO中不是处理事务的地方,因为DAO中的每个方法都是对数据库的一次操作,而Service中的方法才是对应一个业务逻辑。也就是说我们需要在Service中的一方法中调用DAO的多个方法,而这些方法应该在一起事务中。

怎么才能让DAO的多个方法使用相同的Connection呢?方法不能再自己来获得Connection,而是由外界传递进去。

public void daoMethod1(Connection con, …) {
}
public void daoMethod2(Connection con, …) {
}

在Service中调用DAO的多个方法时,传递相同的Connection就可以了。

public class XXXService() {
   private XXXDao dao = new XXXDao();
   public void serviceMethod() {
      Connection con = null;
      try {
         con = JdbcUtils.getConnection();
         con.setAutoCommitted(false);
         dao.daoMethod1(con, …);
         dao.doaMethod2(con, …);
         com.commint();
} catch(Exception e) {
   try {
      con.rollback();
} catch(Exception e) {}
} finally {
   try {
     c
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值