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面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...
随机推荐
- Peekaboo(2019年上海网络赛K题+圆上整点)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 你的位置在\(O(0,0)\),\(A\)的位置为\((x_1,y_1)\),\(B\)的位置为\((x_2,y_2)\),现在已知\(a=O ...
- django cookie,session,auth
一.最完美的auth auth_user 是用来存储的用户注册的username,password auth 首先需要引入模块 from django.contrib import auth 用户认证 ...
- bootm跳转到kernel的流程
转自 https://blog.csdn.net/ooonebook/article/details/53495021 一.bootm说明 bootm这个命令用于启动一个操作系统映像.它会从映像文件的 ...
- macOS Catalina 的zsh升级
MacOS最近做了一个大版本升级,这次升级中对开发者有个很大的更新是,模式的shell变成了zsh,官方提供了升级配置文档:https://support.apple.com/zh-cn/HT2080 ...
- 剑指offer 6:链表(从头到尾打印链表)
链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...
- 洛谷题解 P4392 【[BOI2007]Sound 静音问题】
题目链接 其实写线段树的题还是比较的令我开心的因为不用脑子 怎么判断这题是要写线段树的? 1.暴力只能拿50分 2.这题是个绿题 3 .看数据范围 #include <cstdio> #i ...
- 【LG4397】[JLOI2014]聪明的燕姿
[LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过 ...
- android studio 配置相关问题
1:Unknown AVD name, use -list-avds to see valid list. 下午1:26 Emulator: emulator: ERROR: Unknown A ...
- 第10组 Alpha事后诸葛亮
一.组长博客链接 组长博客 二.总结思考 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的APP主要解决大学生闲置物品处理问题,定义的很清楚,用户 ...
- 配置Nginx的防盗链
实验环境 一台最小化安装的CentOS 7.3虚拟机 配置:1核心/512MB nginx版本1.12.2 一.配置盗链网站 1.启动一台nginx虚拟机,配置两个网站 vim /etc/nginx/ ...