欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis事物浅谈

程序员文章站 2022-04-09 15:27:58
本篇文章主要对Mybatis事物进行基础的介绍。先回顾JDBC事物,再了解Mybatis里面的事物应用。 1.JDBC的事务管理回顾 JDBC的事务管理是基于Connection对象实现的: 开启事务:connection.setAutoCommit(false) 提交事务:connection.c ......

    本篇文章主要对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     }