关于mybatis里面的Executor

【Mybatis源码解析第十章】详细说说Mybatis中的ExecutorType 缘起 上一章我们说到,在mybatis的ExecutorType中,执行sql有三种执行模式,分别为 SIMPLE REUSE BATCH 那么这三种模式有什么区别呢? 其实这三种模式分别对应着三种执行器 SimpleExecutor、ReuseExecutor、BatchExecutor SimpleExecutor @Override public int doUpdate(Ma... 阅读详情
使用mybatis查寻数据,跟踪其执行流程

最开始执行的语句

this.getSqlSession().selectList("QUERY-QUESTION", data, rowBounds);

这里需要找到sqlsession是从哪里来的

getSqlSession是SqlSessionDaoSupport类里面的方法,该类通过spring的自动注入可以把sqlSessionTemplate注入进来,当然这里的sqlSessionTemplate是需要spring配置的

  @Autowired(required = false)
  public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
    this.sqlSession = sqlSessionTemplate;
    this.externalSqlSession = true;
  }

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory"/>
		<constructor-arg index="1" value="BATCH"/>
	</bean>

@Autowired(required = false)是通过类型匹配来注入的,如果没有找到相应对,就不用注入

所以selectList方法为SqlSessionTemlate里面的,再看SqlSessionTemplage,里面的都是通过sqlSessionProxy来执行selectList方法的,也就是通过代理方式来的

  public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType,
      PersistenceExceptionTranslator exceptionTranslator) {

    notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required");
    notNull(executorType, "Property 'executorType' is required");

    this.sqlSessionFactory = sqlSessionFactory;
    this.executorType = executorType;
    this.exceptionTranslator = exceptionTranslator;
    this.sqlSessionProxy = (SqlSession) newProxyInstance(
        SqlSessionFactory.class.getClassLoader(),
        new Class[] { SqlSession.class },
        new SqlSessionInterceptor());
  }

这里用到了java的动态代理,详细可以见java api,有详细的说明

SqlSessionInterceptor实现了InvocationHandler,在invoke方法里面的开始有这样代码,那里是真正的sqlsession

 final SqlSession sqlSession = getSqlSession(
          SqlSessionTemplate.this.sqlSessionFactory,
          SqlSessionTemplate.this.executorType,
          SqlSessionTemplate.this.exceptionTranslator);

跟踪geteSqlSession可以找到他的创建来源,见

SqlSession session = sessionFactory.openSession(executorType);

继续跟踪可以找到DefaultSqlSessionFactory里面的该方法

  private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    Transaction tx = null;
    try {
      final Environment environment = configuration.getEnvironment();
      final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
      tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
      final Executor executor = configuration.newExecutor(tx, execType, autoCommit);
      return new DefaultSqlSession(configuration, executor);
    } catch (Exception e) {
      closeTransaction(tx); // may have fetched a connection so lets call close()
      throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);
    } finally {
      ErrorContext.instance().reset();
    }
  }

通过
 final Executor executor = configuration.newExecutor(tx, execType, autoCommit);

你就知道executor是怎么回来的了

mybatis默认使用了cache,在创建exector时,外面就包了一层CacheExecutor,详细见

  public Executor newExecutor(Transaction transaction, ExecutorType executorType, boolean autoCommit) {
    executorType = executorType == null ? defaultExecutorType : executorType;
    executorType = executorType == null ? ExecutorType.SIMPLE : executorType;
    Executor executor;
    if (ExecutorType.BATCH == executorType) {
      executor = new BatchExecutor(this, transaction);
    } else if (ExecutorType.REUSE == executorType) {
      executor = new ReuseExecutor(this, transaction);
    } else {
      executor = new SimpleExecutor(this, transaction);
    }
    if (cacheEnabled) {
      executor = new CachingExecutor(executor, autoCommit);
    }
    executor = (Executor) interceptorChain.pluginAll(executor);
    return executor;
  }

CachingExecutor可以使mybatis先从缓存中提取数据,数据缓存中没有数据时才从数据库里面提取数据
Arduino+NRF24L01 无线遥控舵机与无刷电机系统搭建指南 本文详细介绍了使用Arduino和NRF24L01模块搭建无线遥控系统的完整指南,涵盖舵机和无刷电机的无线控制。从硬件选型、电路连接到代码编写与调试,提供了实用技巧和常见问题解决方案,帮助DIY爱好者低成本实现稳定可靠的无线遥控应用。 阅读详情

相关推荐

深入Google DroidGuard:剖析其自定义虚拟机如何守护Android应用安全(附pcbc文件机制解析)

本文深入解析Google DroidGuard自定义虚拟机如何通过独特的架构设计和加密机制保护Android应用安全。DroidGuard采用动态密钥派生、全加密执行环境和pcbc文件机制,有效防御逆向工程和自动化攻击,为移动安全提供新思路。

weixin_34254464的博客 307

Mybatis学习 详细

Mybatis 是一个持久层框架,它可以自定义sql、存储过程、高级映射。使用它,你可以免去书写jdbc、设置参数、获取结果集的操作。通过简单的xml或注解配置和映射原始类型、接口、Java POJO为数据库中的记录 。 Mybatis入门 1.添加mybatis依赖 2.用SqlSessionFactoryBuilder从xml配置文件或java代码中构建SqlSessionFactory。xml配置文件中包含了mybatis系统的核心设置,获取数据库连接实例的数据源(DataSource),决定事务作用

qq_39989608的博客 1813

从MFCC到GMM:手把手教你用Python实现说话人识别(附完整代码)

本文详细介绍了如何使用Python实现说话人识别系统,从MFCC特征提取到GMM模型训练,涵盖完整的技术流程和代码示例。通过梅尔频率倒谱系数(MFCC)和高斯混合模型(GMM)的结合,构建高效的说话人识别系统,适用于身份认证和智能交互场景。文章还探讨了从传统方法到深度学习的进阶话题,如i-vector和x-vector技术。

o1p2q3r的博客 200

Mybatis中的执行器(Executor)

在之前的文章中介绍了mybatis的基本使用,从使用流程中可知,在每次执行CURD的时候,都需要获取SqlSession这个对象,接口如下: 可以看出来这个接口主要定义类关于CRUD、数据库事务、数据库刷新等相关操作。下面看它的默认实现类: 可以看到DefaultSqlSession 实现了SqlSession中的方法,(其实我们自己也可根据需要去实现) 而在这个方法中,存在一个属性就是今天需要将的主角,Mybatis的执行器(Executor)。 Executor简单介绍 Exec.

liming0025的专栏 8089

YOLOv11 网络结构详解:一文看懂 Backbone、Head、C3k2、SPPF 和 Detect 检测头

在使用 YOLOv11 进行目标检测时,我们经常会接触到或这样的模型配置文件。backbone和head分别是什么意思?ConvC3k2SPPFC2PSA这些模块分别起什么作用?P3/8、P4/16、P5/32 代表什么?为什么最后 Detect 要同时接收 3 个不同尺度的特征图?YOLOv11n、YOLOv11s、YOLOv11m、YOLOv11l、YOLOv11x 的区别在哪里?

learnerYC的博客 1815

手把手教你用VL822-QFN88设计一个支持PD快充的Type-C四口HUB(附原理图要点)

本文详细介绍了基于VL822-QFN88芯片设计支持PD快充的Type-C四口HUB的完整流程,包括芯片选型、系统架构设计、原理图要点、PCB布局及固件配置。特别适合硬件工程师和电子设计爱好者,帮助实现高速数据传输与快速充电的多端口扩展方案。

weixin_30832405的博客 516

【MyIbatis】MyBatis 核心配置综述之Executor

1.概述 转载:MyBatis 核心配置综述之Executor 上一篇我们对SqlSession和SqlSessionFactory的创建过程有了一个详细的了解,但上述的创建过程只是为SQL执行和SQL映射做了基础的铺垫而已,就和我们Spring源码为Bean容器的加载进行许多初始化的工作相同,那么做好前期的准备工作接下来该做什么了?该做数据库连接驱动管理和SQL解析工作了!那么本篇本章就来讨论一下数据库驱动连接管理和SQL解析的管理组件之 Executor执行器。 2.MyBatis四大组件之 Exec.

九师兄 1923

科研党必备!用Requests+BeautifulSoup升级版Nature爬虫(含PDF下载功能)

本文介绍了一套基于Python Requests和BeautifulSoup的Nature期刊智能爬虫系统,专为科研人员设计,可自动抓取论文标题、摘要及开放获取的PDF文档。系统采用模块化设计,包含请求管理、PDF检测和邮件通知等功能,确保高效合规地获取学术资源,提升科研效率。

weixin_29041767的博客 256

怎么给mybatis指定用哪一种executor执行器

在MyBatis中,可以通过配置文件或代码的方式来指定要使用的执行器(Executor)。你可以根据具体的需求和场景选择合适的执行器类型。默认情况下,MyBatis使用。属性来指定默认的执行器类型。在上述示例中,将默认的执行器类型设置为。在MyBatis的配置文件(通常是。你可以根据需要将其修改为。参数来指定要使用的执行器类型。你可以根据需要将其修改为。方法的重载版本,传递一个。在上述示例中,指定使用。

find123ok的博客 1944

SAP 财务快速记账之--科目分配模型(Account assignment model )

SAP FICO 运维解决方案

lijinbao171022的博客 1771

Arduino、ESP32驱动BMP390L数字大气压传感器(压力传感器)

BMP390L是一款博世新研发的工业级专用数字气压传感器,具有极高的温度稳定性、低漂移、低功耗。

不脱发的程序猿 2011

MyBatis【Executor】

MyBatis Excutor、一级缓存、二级缓存

cinnabar2016的博客 1402

ABAP CDS 货币与计量单位换算全攻略:CURRENCY_CONVERSION、UNIT_CONVERSION 与 DECIMAL_SHIFT 的工程化实践

本文介绍了SAP ABAP CDS中三种单位/货币换算函数(UNIT_CONVERSION、CURRENCY_CONVERSION、DECIMAL_SHIFT)的实战应用。重点包括:各函数的职责边界与适用场景,参数配置与精度控制策略,以及基于标准表(T006、TCUR*等)的换算规则来源。文章提供可运行的CDS示例,涵盖单位换算(如MI转KM)、货币汇率转换(含小数位处理)及纯小数位调整等典型场景,并强调生产环境中需注意的精度差异与审计风险控制。适用于企业报表、成本核算等需要统一口径的业务场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1554

Mybatis解析-执行器Executor详解

本文基于mybatis-spring 1.3.1和mybatis 3.4.4版本 SqlSession执行增删改查都是委托给Executor完成的。 Executor主要完成以下几项内容: 处理缓存,包括一级缓存和二级缓存 获取数据库连接 创建Statement或者PrepareStatement对象 访问数据库执行SQL语句 处理数据库返回结果 CachingExecutor BaseExecutor SimpleExecutor BatchExecutor ReuseExecutor

龚厂长的博客 3463

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

mybatis四大对象之Executor

mybatis中sqlsession下的四大对象是指:executor, statementHandler,parameterHandler,resultHandler对象。这篇文章主要介绍了Mybatis中SqlSession下的四大对象之执行器(executor),需要的朋友可以参考下 首先我先解释一下标题 四大对象是指:executor, statementHandler,parameter...

s297485987的专栏 659

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精通Mybatis之Executor执行器

前言 之前小编写的文章从未有过精通二字,因为感觉自己不配,这次发奋图强努力做到第一个框架的精通,就是这Mybatis了。为什么挑Mybatis因为他比较简洁(源码里面连注释都不太有),然后国内用的比较广泛以及代码量不大。小编还是比较有信心的,这次学习源码如之前在其他文章中所说的,我们从最核心开始,然后一步一步往外扩展,毕竟最外部的调用Api往往做了层层封装运用了各种设计模式,代码的联调也会不断的跳跃,让人很痛苦。所以咱们扒开外层看本质。一如既往的废话不多说,进入正题。 JDBC回顾 众所周知,Mybatis

a1032722788的博客 6198

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mybatis Executor

Executor (https://my.oschina.net/zudajun/blog/667214) when? SqlSessionFactory创建Executor,并将Executor作为defaultSqlSession的构造参数传进去 what? sqlsession中利用Executor完成实际的sql操作 executor操作包括查询及更新(CUD) E...

绿香蕉fighting 525

MyBatis 中 Executor

功能描述SQL 执行引擎统一调度 StatementHandler、ParameterHandler、ResultSetHandler事务管理提供 commit / rollback 接口一级缓存避免重复查询相同 SQL二级缓存支持通过装饰器实现批处理支持提升批量插入/更新效率可扩展性强可以自定义 Executor 实现特定业务逻辑。

红血哥 490

mybatis-executor解析

概述 执行器包主要包含了 Executor、ParameterHandler、ResultSetHandler、StatementHandler。 这些都是sql执行中非常重要的一环,本篇从Executor开始。 Executor:执行器,主要职责是在sql执行过程中添加缓存和事务的功能。与jdbc相关的操作会继续委托给StatementHandler。 Executor public interface Executor { ResultHandler NO_RESULT_HANDLER = nu

qq_28695733的博客 426

Mybatis的Executor执行器

Executor功能概述 每一个sql语句的执行都会先到Executor执行器中在调用相应StatementHandler执行jdbc操作。源码如下SimpleExecutor中的代码片段 public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLExc

qq_39791272的博客 471

MyBatis之Executor组件

一、整体介绍 先看Executor继承结构图: 再看其内部结构图: 可以看到,Executor在SqlSession中,实际上我们都是面向SqlSession编程的,不会直接调用Executor来执行业务逻辑,这里只是深入研究一下。 常用的Executor有三个,SimpleExecutor、BatchExecutor、ReuseExecutor。模式是SimpleExecutor,可以在mybatis配置文件中进行配置: <settings> <setting nam

敲代码的小小酥的博客 770

Mybatis的源码学习之Executor

1.概述 Executor接口是Mybatis的执行器,是Mybatis的调度中心,是SQL语句的生成和查询缓存的维护。Executor是通过Configuration的newExecutor函数来生成的。 2.Executor结构 下面介绍一下Executor接口的实现类以及实现类的继承类之间关系。 从上面的Executor的结构图,我们得到了Executor接口有两个实现类分别为:...

gelong_bokewang的博客 260

Mybatis源码学习(四)——Executor

根据之前对 SqlSession 类的分析()可以发现 SqlSession 与数据库交互的方法都是通过 Executor 对象进行;因此首先对 Executor 接口进行分析,看其拥有什么方法;第一步我们可以发现 Executor 接口拥有一个 ResultHandler 的常量,但其值却为 null,起作用之后再详述;

weixin_63445802的博客 1410

Mybatis中如何指定使用Executor执行器

MyBatis 提供了和三种主要的Executor类型,每种类型都适用于不同的场景。开发者可以通过全局配置或在代码中动态选择合适的Executor,以优化数据库操作的性能。全局配置:在中设置来指定全局默认使用的Executor类型。局部配置:在代码中通过方法动态指定Executor类型。

Flying_Fish_roe的博客 1441

Mybatis深入剖析 -Executor分析

Executor分成两大类:

cleargreen的博客 4204
上一篇: JVM基本类型字符解释表
下一篇: 设置linux的默认字符集
w_intercool
博客等级 码龄19年 6粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值