当前位置: 首页 > news >正文

SSM-MyBatis-09:Mybatis中SqlSession的close为什么能造成事务的回滚

 

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

经过上几次的查找,笔者我就简单的说一下查找的思路,留给读者自己实践

同样找到sqlsession的实现类,----DefaltSqlSession,找它的close方法

 

public void close() {
        try {
            this.executor.close(this.isCommitOrRollbackRequired(false));
            this.closeCursors();
            this.dirty = false;
        } finally {
            ErrorContext.instance().reset();
        }

    }

 

executor执行器的close方法里面的这个方法,传入false

 

private boolean isCommitOrRollbackRequired(boolean force) {
        return !this.autoCommit && this.dirty || force;
    }

 

根据上一篇博客写的,他们三个逻辑运算符的优先级  &&>||>!

得到值为true

看executor.close(boolean XXX)的方法,同样找他实现类BaseExecutor

 

public void close(boolean forceRollback) {
        try {
            try {
                this.rollback(forceRollback);
            } finally {
                if(this.transaction != null) {
                    this.transaction.close();
                }

            }
        } catch (SQLException var11) {
            log.warn("Unexpected exception on closing transaction.  Cause: " + var11);
        } finally {
            this.transaction = null;
            this.deferredLoads = null;
            this.localCache = null;
            this.localOutputParameterCache = null;
            this.closed = true;
        }

    }

 

从头开始看,rollback(true)这一行

 

 

 

 

public void rollback(boolean required) throws SQLException {
        if(!this.closed) {
            try {
                this.clearLocalCache();
                this.flushStatements(true);
            } finally {
                if(required) {
                    this.transaction.rollback();
                }

            }
        }

    }

 

finally中是什么事物的回滚啊,这就真相大白

SqlSession中的close在底层调用了事务的回滚的方法,当然会造成事务的回滚啊~~~~~~

 

转载于:https://www.cnblogs.com/DawnCHENXI/p/8467447.html

相关文章:

  • Javascript理解this对象
  • GNUPG
  • 零基础Python爬虫实现(百度贴吧)
  • 我对CopyOnWrite的思考
  • RabbitMQ入门-路由-有选择的接受消息
  • 报告称国产智能手机全球市场份额33.1% 超过韩国
  • iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
  • 深入理解java虚拟机 精华总结(面试)
  • Spring框架
  • DTS-071007 表结构在源库和目标库中不一致
  • 算法学习之路|聪明的打字员
  • [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
  • MongoDB入门(二)——MongoDB下载与安装
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • centos7设置静态IP
  • [译]如何构建服务器端web组件,为何要构建?
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android Studio:GIT提交项目到远程仓库
  • CSS实用技巧干货
  • ECS应用管理最佳实践
  • export和import的用法总结
  • HTTP 简介
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • magento 货币换算
  • MySQL用户中的%到底包不包括localhost?
  • Selenium实战教程系列(二)---元素定位
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 测试开发系类之接口自动化测试
  • 工作手记之html2canvas使用概述
  • 关于 Cirru Editor 存储格式
  • 数据结构java版之冒泡排序及优化
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 写代码的正确姿势
  • 我们雇佣了一只大猴子...
  • !!java web学习笔记(一到五)
  • # C++之functional库用法整理
  • $(selector).each()和$.each()的区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (生成器)yield与(迭代器)generator
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core 6 集成和使用 mongodb
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .Net组件程序设计之线程、并发管理(一)
  • @property括号内属性讲解