JDBC底层开启事务

1) JDBC底层开启事务

  • 事务概念:一组SQL语句(指DML),要么同时生效,要么同时失效

  • 作用域:仅仅对DML语句生效(insert,delete,update)

  • 作用对象:必须是同一个Connection对象

  • jdbctemplate底层必须手动开启

    • 使用 TransactionSynchronizationManager.initSynchronization();手动开启事务管理器

    • 关闭自动递交业务:connection.setAutoCommit(false);改为手动递交

    • 若成功:connection.commit();若失败:connection.rollback();

    • 使用 TransactionSynchronizationManager.clearSynchronization();手动关闭事务管理器

     Connection connection =null;
  ​
          try {
              //同时操作sql语句,需要使用事务
              //获取数据源
              DataSource source = JdbcUtils.getDataSource();
              //实例jdbcTemplate
              JdbcTemplate template = new JdbcTemplate(source);
  //            JdbcTemplate template = new JdbcTemplate();
              //启动事务管理器(获取datasource操作数据库连接对象并绑定到当前线程中)
              TransactionSynchronizationManager.initSynchronization();
              //从数据源中获取jdbcTemplate操作的当前连接对象
  //            connection = JdbcUtils.getConnection();
  //            connection = source.getConnection();
               connection = DataSourceUtils.getConnection(source);
  //            TransactionManagemen
              connection.setAutoCommit(false);
              template.update(sql,"ceshi1","男1113333");
              System.out.println(1/0);// 模拟异常
              template.update(sql,"ceshi2","男222333");
  //            connection.commit();
          } catch (Exception e) {
              e.printStackTrace();
              connection.rollback();
          }finally {
              connection.commit();
              TransactionSynchronizationManager.clearSynchronization();
          }
  ​
  执行效果:
  异常产生时,数据没有出现一半成功一半失败!

猜你喜欢

转载自blog.csdn.net/iCopper_/article/details/81192586