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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPF 使用TextBox做密码输入框

    WPF 使用TextBox做密码输入框密码输入框需要输入的密码不能显示明文,用其他的特殊字符代替显示。显示效果如下:Xaml部分代码如下:

    2022年7月25日
    113
  • java.lang.RuntimeException: Can not toast on a thread that has not called Looper.prepare()终极解决方案

    java.lang.RuntimeException: Can not toast on a thread that has not called Looper.prepare()终极解决方案使用runOnUiThread方法,不使用Looper。

    2022年7月18日
    12
  • spel表达式注入[通俗易懂]

    spel表达式注入[通俗易懂]使用parseExpression方法将字符串表达式转换为Expression对象;ParserContext接口用于定义字符串表达式是不是模板,及模板开始与结束字符;

    2022年9月12日
    0
  • Git常用命令详解

    Git常用命令详解文章目录Git简介三个区主要的几个命令gitcommit用法gitstash用法gitreset用法gitrefloggitaddgitcheckoutgitcheckout切换分支gitcheckout回退修改gitrevertreset,checkout,revert总结删除分支gitpushgitpull1.gitmerge2.gitrebase3.reb…

    2022年5月29日
    36
  • Java异常处理习题

    Java异常处理习题一、选择题1、java中用来抛出异常的关键字是()A.try     B.catch   C.throw         D.finally 2、关于异常,下列说法正确的是()A.异常是一种对象       B.一旦程序运行,异常将被创建C.为了保证程序运行速度,要尽量避免异常控制     D.以上说法都不对 3、()类是所有异常类的父类。A.Th

    2022年5月12日
    76
  • ewebeditor漏洞利用总结

    ewebeditor漏洞利用总结先从最基本的记录起!通常入侵ewebeditor编辑器的步骤如下:1、首先访问默认管理页看是否存在。       默认管理页地址2.80以前为ewebeditor/admin_login.asp以后版本为admin/login.asp(各种语言的大家自己改后缀,本文就以asp来进行说明,下面不再细说了!)2、默认管理帐号密码!       默认管理页存在!我们就用帐号密码

    2022年7月14日
    56

发表回复

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

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