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 }
手动提交事务_映射器配置文件方式_测试类_例:
@Test
public void testDelete(){
userDao.delete(57);
session.commit(); //手动提交事务
}
Mybatis事物浅谈的更多相关文章
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- !! 浅谈Java学习方法和后期面试技巧
浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...
- BITED数学建模七日谈之四:数学模型分类浅谈
本文进入到数学建模七日谈第四天:数学模型分类浅谈 大家常常问道,数学模型到底有哪些,分别该怎么学习,这样能让我们的学习有的放矢,而不至于没了方向.我想告诉大家,现实生活中的问题有哪些类,数学模型就有哪 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- 浅谈 Java 主流开源类库解析 XML
在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...
- 【转】浅谈UML的概念和模型之UML九种图
原文地址:浅谈UML的概念和模型之UML九种图 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...
- Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice
浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.RE ...
- 浅谈RESTful
浅谈RESTful 什么是RESTful? REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Ro ...
- 浅谈JS面向对象
浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...
随机推荐
- JMeter【第五篇】关联:5种方法
前几天在Q群里看到群友发的最近10年性能测试工具使用率的统计,最近的2018年,jmeter+loadrunner占了93%的使用率,说明这两个是主流,其中,jmeter的使用率逐年提升,现在已经超过 ...
- spring学习3
spring整合JDBC spring提供了很多模板整合Dao技术 spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模板对象 ...
- MySQL 测试数据批量导入
使用存储过程 方便工作中测试,一次插入多条数据 DELIMITER $$ CREATE PROCEDURE `XXX`.`XXX_test_batch_insert`() BEGIN DECLARE ...
- 1-PLC基础入门系列(PLC介绍,连接下载说明)
阅读这节文章之前请先阅读这一篇 https://www.cnblogs.com/yangfengwu/p/7681702.html 首先明确一点,PLC就是用单片机做的,后面我会给大家演示用我自己的 ...
- 洛谷 P1965 转圈游戏
洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...
- ##xcode 文件模板自定义
xcode 文件模板自定义 在使用xcode内部模板创建C++类文件时,创建出来的头文件是.hpp结尾的,但是我想用.h结尾的, 所以就网上找了下资料看能不能自定义模板,这样还可以修改文档注释.在网上 ...
- 1473. [Ioi2000]Post加强版 n log^2 n做法
1473. [Ioi2000]Post加强版 n log^2 n做法 题面 有n个城市从负方向向正方向按照1至n标号,\(d[i]\)表示城市i离原点的距离并且\(d[1] = 0\),对于\(i \ ...
- Java 并发系列之四:java 多线程
1. 线程简介 2. 启动和终止线程 3. 对象及变量的并发访问 4. 线程间通信 5. 线程池技术 6. Timer定时器 7. 单例模式 8. SimpleDateFormat 9. txt ja ...
- 图、流程图、ER图怎么画及常见画图工具(流程图文章汇总)
流程图基本符号 首先要记住图中1.2.3.4.6这几种符号. 图片摘自网络 流程图基本概念及入门 简易流程图 流程图简介(基本符号与绘制工具) 你可能学了假流程图,三步教会你绘制大厂流程图 使用流程图 ...
- Intellij 热部署插件 JRebel [转载]
原文:https://blog.csdn.net/weixin_42831477/article/details/82229436 Intellij热部署插件JRebel IDEA本身没有集成热部署工 ...