mybatis事务与回滚例子 commit、rollback、autoCommit
2017-07-03 08:36
369 查看
1.在JDBC中,设置一次将当前所有操作为一次事务的方式是: conn.setAutoCommit( false );
修改数据库遵从try-cath-finaly:
try {
sqlsession.commit();
} catch (Exception e) {
sqlsession.rollback();
}finally {
sqlsession.close();
}
2.在mybatis中,设置setAutoCommit( false ):
mybatis官方AIp,
SqlSession openSession()
SqlSession openSession(boolean autoCommit) ;
默认无参的openSession(),即AutoCommit( false ):
如果要设置为自动事务则 openSession(true) ;
3.实例
public class MainTC {
/*使用sqlSession对数据库做修改的操作,都必须在最后使用commit()方法提交,否则处理添加,其他操作都无效。
* */
public static void main(String[] args) throws IOException {
Reader reader= Resources.getResourceAsReader(“config.xml”);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlsession=sqlSessionFactory.openSession(false);//默认为false为一次事物
try {
User u1 =new User(1,”aaaa”,11);
User2 u2 =new User2(1,22222);//故意设置的一个错误的User类,mapper.xml匹配的是User类不是User2类,所有在添加u2会出现异常
}
测试结果:
当openSession(false)时候,u1没有插入数据库
当openSession(true)时候,u1被插入数据库
结论:1.openSession(false)时,当前所有的操作都为一个事务,当执行到 sqlsession.insert(“resources.userMapper.addUser”,u2);这句发生异常的时候,会执行 sqlsession.rollback();之前所有对数据库的操作全部取消。
2.openSession(true)时,自动事务,后面对数据库的操作发生异常,不影响前面对数据库的操作,因为rollback()只能回滚当前的一个事务
修改数据库遵从try-cath-finaly:
try {
sqlsession.commit();
} catch (Exception e) {
sqlsession.rollback();
}finally {
sqlsession.close();
}
2.在mybatis中,设置setAutoCommit( false ):
mybatis官方AIp,
SqlSession openSession()
SqlSession openSession(boolean autoCommit) ;
默认无参的openSession(),即AutoCommit( false ):
如果要设置为自动事务则 openSession(true) ;
3.实例
public class MainTC {
/*使用sqlSession对数据库做修改的操作,都必须在最后使用commit()方法提交,否则处理添加,其他操作都无效。
* */
public static void main(String[] args) throws IOException {
Reader reader= Resources.getResourceAsReader(“config.xml”);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlsession=sqlSessionFactory.openSession(false);//默认为false为一次事物
try {
User u1 =new User(1,”aaaa”,11);
User2 u2 =new User2(1,22222);//故意设置的一个错误的User类,mapper.xml匹配的是User类不是User2类,所有在添加u2会出现异常
sqlsession.insert("resources.userMapper.addUser",u1); sqlsession.insert("resources.userMapper.addUser",u2); sqlsession.commit(); System.out.println("OK"); } catch (Exception e) { System.out.println("出错------------"); e.printStackTrace(); sqlsession.rollback(); }finally { sqlsession.close(); } }
}
测试结果:
当openSession(false)时候,u1没有插入数据库
当openSession(true)时候,u1被插入数据库
结论:1.openSession(false)时,当前所有的操作都为一个事务,当执行到 sqlsession.insert(“resources.userMapper.addUser”,u2);这句发生异常的时候,会执行 sqlsession.rollback();之前所有对数据库的操作全部取消。
2.openSession(true)时,自动事务,后面对数据库的操作发生异常,不影响前面对数据库的操作,因为rollback()只能回滚当前的一个事务
相关文章推荐
- 关于plsql的commit,事务回滚 rollback
- MySQL事务回滚rollback与提交commit的操作
- 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
- 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
- 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
- mybatis中commit和rollback使用不当造成事务泄露和锁超时问题总结
- Spring transaction事务之roll back回滚: rollback-for
- 事务回滚setAutoCommit(false)
- sql事务处理回滚及保留点transaction,ROLLBACK
- 在Hiberate事务中,出现抛异常或者其它原因导致没有执行commit或rollback方法时的安全问题
- mybatis3.2.7事务查询和插入例子
- spring-mybatis 事务回滚问题
- Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
- 关于EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数
- yii如何使用事务,begin,commit,rollback
- EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。
- MySql之commit、rollback等事务控制命令
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句
- spring管理mybatis事务,不回滚
- 处理DB2 数据COMMIT和ROLLBACK语句和事务边界