mybatis学习八 事物

Posted 阿瞒123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis学习八 事物相关的知识,希望对你有一定的参考价值。

1.事物的定义:

是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

2,事物的特性:

一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

3. mybatis中的事物

  3.1, 在 mybatis 中默认是关闭了 JDBC 的自动提交功能
    3.1.1 每一个 SqlSession 默认都是不自动提交事务.
    3.1.2 session.commit()提交事务.
    3.1.3 openSession(true);自动提交.setAutoCommit(true);

  3.2  mybatis 底层是对 JDBC 的封装.

    3.2.1 JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.

    3.2.2 mybatis 中<insert> <delete> <update>标签没有 resultType 属性,认为返回值都是 int

  3.3 在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个Transaction(事务对象),同时     autoCommit 都为 false,如果出现异常,应该 session.rollback()回滚事务. 在mybatis中,事物的自动提交被关闭了。并且在mybatis中,在同一个sqlSession中的所有的操作都在一个事物中

    //加载配置文件
        InputStream in = Resources.getResourceAsStream("mybatis.xml");
        //使用工厂设计模式   【注意】以后sqlSessionFactory都会被spring 管理,不需要我们自己创建
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
        
        //获取sqlSession
        SqlSession sqlSession=sqlSessionFactory.openSession();
    try {
            sqlSession.insert("包名.insert标签id", "参数");
            sqlSession.commit();//提交事物
        }catch(Exception e) {
            sqlSession.rollback();//回滚事物
        }finally {
            sqlSession.close();
        }

 

  在jdbc中,conn的autoCommit是true的,所以在jdbc中每一条语句都是一个事物,若是想多条语句组成一个事物,需要手动设置,手动提交。

public void JdbcTransfer() { 
    java.sql.Connection conn = null;
     try{ 
        conn = conn =DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","userpwd");
         // 将自动提交设置为 false,
         //若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
         conn.setAutoCommit(false);

         stmt = conn.createStatement(); 
         // 将 A 账户中的金额减少 500 
         stmt.execute("         update t_account set amount = amount - 500 where account_id = ‘A‘");
         // 将 B 账户中的金额增加 500 
         stmt.execute("         update t_account set amount = amount + 500 where account_id = ‘B‘");

         // 提交事务
         conn.commit();
         // 事务提交:转账的两步操作同时成功
     } catch(SQLException sqle){            
         try{ 
             // 发生异常,回滚在本事务中的操做
            conn.rollback();
             // 事务回滚:转账的两步操作完全撤销
             stmt.close(); 
             conn.close(); 
         }catch(Exception ignore){ 

         } 
         sqle.printStackTrace(); 
     } 
}

 

 



   

 








以上是关于mybatis学习八 事物的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习(39):动态sql片段

spring学习 十八 spring的声明事物

mybatis学习日志二

Java基础学习笔记八 Java基础语法之接口和多态

如何从Android中的片段单击按钮打开片段

information_schema系列八(事物,锁)