Mybatis事务隔离级别「建议收藏」

Mybatis事务隔离级别「建议收藏」转载:https://blog.csdn.net/qq924862077/article/details/52599961一般数据库的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√:可能出现    ×:不会出现脏读不可重复读幻读说明…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

转载:https://blog.csdn.net/qq924862077/article/details/52599961

一般数据库的隔离级别有4个,由低到高依次为Read uncommittedRead committedRepeatable readSerializable,这四个级别可以逐个解决脏读不可重复读幻读这几类问题。


√: 可能出现    ×: 不会出现



脏读 不可重复读 幻读
说明
Read uncommitted
直译就是”读未提交”,意思就是即使一个更新语句没有提交,但是别 


的事务可以读到这个改变.这是很不安全的。允许任务读取数据库中未提交的数据更改,也称为脏读。

Read committed ×
直译就是”读提交”,可防止脏读,意思就是语句提交以后即执行了COMMIT以后 


别的事务就能读到这个改变. 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 

Repeatable read × ×
直译就是”可以重复读”,这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

Serializable × × ×
直译就是”序列化”,意思是说这个事务执行的时候不允许别的事务并发执行. 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

Mybatis也是提供了如上表所示的隔离级别,只不过增加了一种没有事务,源码如下:

[java] 
view plain  
copy

  1. /** 
  2.  * @author Clinton Begin 
  3.  */  
  4. public enum TransactionIsolationLevel {  
  5.   NONE(Connection.TRANSACTION_NONE),  
  6.   READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),  
  7.   READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),  
  8.   REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),  
  9.   SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);  
  10.   
  11.   private final int level;  
  12.   
  13.   private TransactionIsolationLevel(int level) {  
  14.     this.level = level;  
  15.   }  
  16.   
  17.   public int getLevel() {  
  18.     return level;  
  19.   }  
  20. }  



这样在DefaultSqlSessionFactory中创建SqlSession时,可以设置数据库的事务隔离级别,以及通过设置autoCommit来设置事务的提交方式,方式如下:

当autoCommit=false时,插入的数据报错时,修改的内容不会提交到数据库,但是如果没有进行rollback回滚操作时就会造成数据库死锁问题

 当autoCommit = true对连续的操作数据中间出现错误时会部分提交,导致产生脏数据。

[java] 
view plain  
copy

  1. private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)  



Mybatis提供的事务隔离级别完全契合数据库事务隔离级别方式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182198.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月14日 上午8:16
下一篇 2022年10月14日 上午8:36


相关推荐

  • 触屏手套的工作原理

    触屏手套的工作原理

    2026年3月15日
    1
  • 树莓派4B安装tensorflow2.0[通俗易懂]

    树莓派4B安装tensorflow2.0[通俗易懂]这个GitHub上可以下载到tensorflow2.x:https://github.com/lhelontra/tensorflow-on-arm/releases我就拿我下载的举例子吧:我下载的是这个版本的:tensorflow-2.0.0-cp37-none-linux_armv7l.whl1、把下载的这个tensorflow-2.0.0-cp37-none-linux_armv7l.whl文件放进树莓派里边,cd到你拖进的那一目录下(我是拖到Desktop,所以是:cdDesktop),命令行

    2022年6月12日
    50
  • OpenClaw(Clawdbot)+Skills集成小白教程:2026年京东云一键部署基础教学

    OpenClaw(Clawdbot)+Skills集成小白教程:2026年京东云一键部署基础教学

    2026年3月13日
    3
  • preference用法for_notification用法

    preference用法for_notification用法PreferenceFragment引入在Android3.0之前,设置界面使用PreferenceActivity,在Android3.0之后,官方推荐使用PreferenceFragment,对应于碎片化技术。使用新建Fragment继承PreferenceFragment,加载选项配置xml文件。publicstaticclassNotificationPreferenceFr…

    2025年9月29日
    4
  • Landsat 8数据介绍「建议收藏」

    Landsat 8数据介绍「建议收藏」1.简介  1.1数据简介  2013年2月11日,美国航空航天局(NASA)成功发射Landsat-8卫星。Landsat-8卫星上携带两个传感器,分别是OLI陆地成像仪(OperationalLandImager)和TIRS热红外传感器(ThermalInfraredSensor)。  Landsat-8在空间分辨率和光谱特性等方面与Landsat1-7保持了基本一致,卫星一共…

    2022年7月23日
    12
  • 测试用例的设计方法:等价类划分法[通俗易懂]

    测试用例的设计方法:等价类划分法[通俗易懂]欢迎大家关注我的个人公众号:小朱谈软件测试,全是干货哦。测试用例的设计方法对测试人员来说,非常重要,在工作中,确实会用到。测试用例设计的越全面,线上问题肯定越少,合理地运用这些设计方法,可以减少冗余用例,提高测试效率和覆盖率。常见测试用例的设计方法有八种,下图中标红的是需要掌握的。优先级从等价类划分法,边界值分析法方向排序。每种设计方法,我都会分析,今天我们先一起看看什么是等价类划分法。等价类划分法:官方定义:将程序所有可能的输入数据…

    2022年10月18日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号