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

简介:   ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     经过上几次的查找,笔者我就简单的说一下查找的思路,留给读者自己实践 同样找到sqlsession的实现类,----DefaltSqlSession,找它的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在底层调用了事务的回滚的方法,当然会造成事务的回滚啊~~~~~~

 

目录
相关文章
|
5月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
|
5月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
|
14天前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
4月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
70 2
|
3月前
|
SQL Java 数据库连接
Mybatis之SqlSession简析
Mybatis之SqlSession简析
100 0
|
4月前
|
Java 数据库连接 Android开发
SSM框架——使用MyBatis Generator自动创建代码
SSM框架——使用MyBatis Generator自动创建代码
36 2
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js的个人事务管理系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的个人事务管理系统附带文章和源代码设计说明文档ppt
35 2
|
4月前
|
Java 数据库连接 mybatis
使用Mybatis获取sqlSession对象老爆红的问题解决
使用Mybatis获取sqlSession对象老爆红的问题解决
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的班级事务管理系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的班级事务管理系统附带文章和源代码设计说明文档ppt
27 1
|
5月前
|
Java 关系型数据库 MySQL
SpringBoot整合JUnit、MyBatis、SSM
SpringBoot整合JUnit、MyBatis、SSM
38 4