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(); } 执行效果: 异常产生时,数据没有出现一半成功一半失败!