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面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...
随机推荐
- PHP的SOLID设计原则
SOLID Design Principles, 这是一个比设计模式更高级别的概念, 以构建良好代码为目标,真正掌握了就是大师级别了. 我~~~仅知晓~ /*SOLID Design Principl ...
- Activiti6 查询由某人发起的流程请求 设置流程发起人
发起流程时,配置activiti:initiator属性,并且在代码中: Authentication.setAuthenticatedUserId(userId); 其中,userId对应流程发起人 ...
- linux 文件上传 linux服务器
1.Linux下目录复制:本机->远程服务器 1 2 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 #test1 ...
- Spring Boot 注入外部配置到应用内部
Spring Boot允许你外部化你的配置,这样你就可以在不同的环境中使用相同的应用程序代码,你可以使用properties文件.YAML文件.环境变量和命令行参数来外部化配置,属性值可以通过使用@V ...
- 微信2.1 for Windows发布 微信群可多人语音或视频通话
5月31日,windows电脑版微信发布更新,微信2.1 for Windows带来最主要的功能是微信群可以多人语音或视频通话了,建个家庭群组,常年在外工作的家人也可以每天见面了,多亲切! 除了可以建 ...
- opacity兼容性问题
用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...
- VS 编译总是出现错误: "LC.EXE 已退出,代码为-1"
最近在开发CS的一个项目时,编译总是出现错误: "LC.EXE 已退出,代码为-1" 解决方法一:用记事本打开*.licx,里面写的全是第三方插件的指定DLL,删除错误信息,保存, ...
- 【Mybatis】拼接表名
- FFT学习
看了一天的多项式的内容,看博客的时候好像还是那么回事,一看题,哇塞,发现我其实连卷积是啥都没看懂. qtdydb,背板子. 不知道卷积是啥就很伤了. P3803 [模板]多项式乘法(FFT) #inc ...
- 用简单的JS代码制作计算器
代码+注释一共不到200行,是练习交流的必备良药 主界面如下: 操作示意图: 以下是代码部分 HTML: <div> <table class="window"& ...