• Mybatis事物浅谈


        本篇文章主要对Mybatis事物进行基础的介绍。先回顾JDBC事物,再了解Mybatis里面的事物应用。

    1.JDBC的事务管理回顾

    JDBC的事务管理是基于Connection对象实现的:

    开启事务:connection.setAutoCommit(false)

    提交事务:connection.commit()

    回滚事务:connection.rollback()

    2.事务的特性:ACID

    原子性:事务是不可分割的。一个事务里的操作,不可能成功一半

    一致性:事务提交前后,数据/状态是一致的

    隔离性:事务并发时,事务应该是互不干扰相互独立的

    持久性:事务一旦提交,数据就永久保存到磁盘上。

    3.事务并发时可能存在的问题:

    ①脏读:一个事务里读取到另外一个事务未提交的数据。

    ②不可重复读:一个事务里,多次读取的数据不一致。是受到了其它事务update的干扰。

    ③虚读/幻读:一个事务里,多次读取的数据不一致。是受到了其它事务insert、delete干扰事务之间的隔离级别不够高,会导致事务并发问题。

      使用隔离级别解决事务并发问题

    隔离级别

    脏读

    不可重复读

    虚读

    read uncommitted

    read committed

    repeatable read

    serializable

    两种事物管理的方式:手动提交自动提交(实际开发中是交给sping控制与我们无关了),增.删.改需要事物,查不需要。

    Mybatis的是对JDBC的封装,所以Mybatis在本质上也是基于Connection对象实现的事务管理,只是把管理的代码封装起来了,是使用SqlSession对象进行事务管理的

    1.默认事务管理方式,默认情况下,我们使用工厂对象的openSession()方法得到的SqlSession对象,是关闭了事务自动提交的,即:默认情况下,SqlSession是开启了事务的,需要手动提交。

         ①获取session对象:factory.openSession()

      ②操作完数据库之后,需要手动提交事务:sqlSession.commit();

      ③如果要回滚事务,就使用方法:sqlSession.rollback(); 

    2自动提交事务实现,Mybatis也支持自动提交事务,操作方法如下:

          ①获取SqlSession对象:factory.openSession(true)

          ②操作数据库,事务会自动提交

          ③自动提交事务openSession(true)

    自动提交事务_映射器实现类方式_实现类_例:

    1 @Override
    2 public void save(User user) {
    3     SqlSession session = factory.openSession(true);//自动提交了事物
    4     session.insert("com.jxjdemo.dao.UserDao.save",user);
    5     session.close();//关闭流,释放资源
    6 }

    手动提交事务_映射器配置文件方式_测试类_例:

    1  @Test
    2     public void testDelete(){  
    3         userDao.delete(57);
    4         session.commit();  //手动提交事务
    5     }
  • 相关阅读:
    Python自动化测试框架有哪些?
    Python正则表达式
    用户事务处理中同步请求与异步请求区别
    Python——数据结构—链表
    Mysql的隔离级别 以及对脏读、不可重复读、幻读的理解
    http协议及与https协议的区别
    Cookie与Session的区别
    Python——数据结构—数组
    Python—Flask写项目Mysql显示sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1038, 'Out of sort memory, consider increasing server sort buffer size')
    Python—将PyCharm中的代码提交在Gitee码云的方法
  • 原文地址:https://www.cnblogs.com/jxearlier/p/11676584.html
Copyright © 2020-2023  润新知