本篇文章主要对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事物浅谈的更多相关文章

  1. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  2. !! 浅谈Java学习方法和后期面试技巧

    浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...

  3. BITED数学建模七日谈之四:数学模型分类浅谈

    本文进入到数学建模七日谈第四天:数学模型分类浅谈 大家常常问道,数学模型到底有哪些,分别该怎么学习,这样能让我们的学习有的放矢,而不至于没了方向.我想告诉大家,现实生活中的问题有哪些类,数学模型就有哪 ...

  4. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  5. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

  6. 【转】浅谈UML的概念和模型之UML九种图

    原文地址:浅谈UML的概念和模型之UML九种图 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...

  7. Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

    浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.RE ...

  8. 浅谈RESTful

    浅谈RESTful 什么是RESTful? REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Ro ...

  9. 浅谈JS面向对象

    浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...

随机推荐

  1. django 统计表

    1. 复杂版 统计,通过跨表查询和timedate模块过滤找到 from django.db.models import Count class TongJiView(View): def today ...

  2. 02-赵志勇机器学习-Logistics_Regression-test(转载)

    # coding:UTF-8 ''' Date:20160901 @author: zhaozhiyong ''' import numpy as np from lr_train import si ...

  3. vue-cli3和ts建立vue项目

    第一步,如果你之前没有装vuecli,可以直接执行下面命令 npm install --global @vue/cli 注:这里我install 的时候不成,于是我用的是 cnpm install - ...

  4. 阿里巴巴java开发手册 学习

    3. [强制]类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外: DO / BO / DTO / VO / AO 正例: MarcoPolo / UserDO / Xml ...

  5. hadoop 参数大全

    方法一.可以通过hadoop官方网址查询, 网址如下: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ ...

  6. ESA2GJK1DH1K开发教程: 来看看最新整理的整个开发板的教程大纲吧

    项目开发:教程大纲(测试板型号:ESA2GJK1DH1K) 购买链接: https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.25911deb ...

  7. 请写出css中选择器(元素选择器、类选择器、id选择器)的优先级顺序,和当各种选择器组合时,优先级的计算规则是什么?

    id选择器>类选择器>元素选择器 规则:选择器的权重值表述为4个部分,用0,0,0,0表示. 通配符*的权重为0,0,0,0 标签选择器.伪元素选择器的权重为0,0,0,1 类选择器.属性 ...

  8. python paramiko模块简介及安装

    一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...

  9. 【JZOJ5739】【20190706】毒奶

    题目 有\(n\)个现实城市,另有\(n\)个幻想城市 原图中在现实城市存在\(m\)条边,在幻想城市存在\(m-1-n\)条边 一个排列是合法的当且进当显示城市 \(i\) 向幻想城市 \(p_i\ ...

  10. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...