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

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

  @Test
public void testDelete(){
userDao.delete(57);
session.commit(); //手动提交事务
}

最新文章

  1. oracle Entity db.Database.SqlQuery ORA-01843: 无效的月份
  2. Javascript函数的几种写法
  3. CSS3选择器的研究,案例
  4. BZOJ 2448: 挖油
  5. 20145206邹京儒《Java程序设计》第7周学习总结
  6. iOS从不同页面跳转回到指定控制器
  7. Redis安装,mongodb安装,hbase安装,cassandra安装,mysql安装,zookeeper安装,kafka安装,storm安装大数据软件安装部署百科全书
  8. 【ajax】FormData
  9. as3+java+mysql(mybatis) 数据自动工具(六)
  10. 基于redis的IP地址快速查询
  11. [cocos2dx 3.0 + iap]中文文档(转)
  12. IntelliJ IDEA: maven & jetty 开发 java web
  13. cocoapods导入第三方库
  14. 面试题 收集请求k千里马
  15. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
  16. Python学习之条件判断和循环
  17. 【图文详解】Hadoop集群搭建(CentOs6.3)
  18. 判断浏览器大于等于ie9
  19. H5 71-网易注册界面4
  20. 什么是python的全局解释锁(GIL)

热门文章

  1. 使用WIFI准备工作及配置内核——韦东山
  2. pycharm运行过程中pycharm控制台和python控制台之间的切换
  3. Django API 自定义状态码
  4. Biorhythms(信息学奥赛一本通 1639)
  5. SCDM导入点数据
  6. 最新版IntelliJ IDEA2019破解方法、补丁、注册码(激活码),永久激活
  7. java基础 static
  8. 【2019年05月16日】A股最便宜的股票
  9. PS 个人常用功能
  10. 文本编辑 工具vim