SqlSession下的四大核心组件
Mybatis中SqlSession下的四大核心组件:ParameterHandler 、ResultSetHandler 、StatementHandler 、Executor 。

关注源码类: Configuration.java

//ParameterHandler 处理sql的参数对象
public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {ParameterHandler parameterHandler = mappedStatement.getLang().createParameterHandler(mappedStatement, parameterObject, boundSql);//包装参数插件parameterHandler = (ParameterHandler) interceptorChain.pluginAll(parameterHandler);return parameterHandler;
}//ResultSetHandler 处理sql的返回结果集
public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler,ResultHandler resultHandler, BoundSql boundSql) {ResultSetHandler resultSetHandler = new DefaultResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds);//包装返回结果插件resultSetHandler = (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);return resultSetHandler;
}//StatementHandler 数据库的处理对象
public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);//包装数据库执行sql插件statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);return statementHandler;
}public Executor newExecutor(Transaction transaction) {//创建Mybatis的执行器:Executorreturn newExecutor(transaction, defaultExecutorType);
}public Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType = executorType == null ? defaultExecutorType : executorType;executorType = executorType == null ? ExecutorType.SIMPLE : executorType;Executor executor;//mybatis支持的三种执行器:batch、reuse、simple,其中默认支持的是simpleif (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);}//包装执行器插件executor = (Executor) interceptorChain.pluginAll(executor);return executor;
}

Mybatis的框架设计中,Mapper执行的过程中是通过Executor、ParameterHandler、StatementHandler、ResultHandler来完成数据库操作并返回处理结果的。

Mybatis中SqlSession下的四大核心组件分析相关推荐

  1. Java中的sqlsession_java相关:MyBatis中SqlSession实现增删改查案例

    java相关:MyBatis中SqlSession实现增删改查案例 发布于 2020-6-13| 复制链接 摘记: 前言     开博客这是第一次写系列文章,从内心上讲是有点担心自己写不好,写不全,毕 ...

  2. SqlSessionTemplate是如何保证MyBatis中SqlSession的线程安全的?

    2019独角兽企业重金招聘Python工程师标准>>> 一.DefaultSqlSession的线程不安全性 在MyBatis架构中SqlSession是提供给外层调用的顶层接口,实 ...

  3. mybatis中SqlSession一定要关闭

       今天在使用mybatis查询数据时,出现了一个很奇怪的问题.同一条sql语句,查询时快时慢,并且有一定的规律性,大概每10次查询中有一次会特别特别的慢,快的只需要1ms,慢的要20000ms,s ...

  4. mybatis中sqlSession的设计与实现

    sqlSession基于工厂方法来实现的,SqlSession和SqlSessionFactory的接口定义如下 public interface SqlSession extends Closeab ...

  5. Mybatis中动态Sql语句的拼接分析

    一.动态查询 1.方式一: <!--if标签--><!--if中的test属性必须录入,其内部为ognl表达式,不需要#{}.如果test内满足,则主体语句执行--><s ...

  6. Mybatis中的缓存

    Mybatis中的缓存 什么是缓存 存在于内存中的临时数据. 为什么使用缓存 减少和数据库的交互次数,提高执行效率. 什么样的数据能使用缓存,什么样的数据不能使用 适用于缓存: 经常查询并且不经常改变 ...

  7. 【笔记】mybatis的sqlSession和Mapper详解

    文章目录 SqlSession介绍和使用 Mapper映射器 总结 SqlSession介绍和使用 SqlSession是一个接口类,它类似于你们公司前台的美女客服,它扮演着门面的作用,而真正干活的是 ...

  8. Spring整合mybatis中的sqlSession是如何做到线程隔离的?

    转载自  Spring整合mybatis中的sqlSession是如何做到线程隔离的? 项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按 ...

  9. java mybatis狂神说sql_Mybatis框架下SQL注入审计分析

    前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少.新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手, ...

最新文章

  1. 【Pandas库】(2) Series的基本操作方法
  2. 国家计划统筹布局哪些人工智能创新平台?
  3. Linux运维人员必会开源运维工具体系
  4. Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)
  5. 常用各种芯片手册大全_【汇总】超全面!国内芯片60个细分领域知名代表企业...
  6. JAVA多线程和并发面试问题
  7. jquery实时监听输入框值变化
  8. 让Microsoft Web Application Stress Tool 支持非80端口的站点测试
  9. Python机器学习方向企业面试题(三)
  10. java虚拟机(JVM)的内存设置
  11. JDK1.8之ConcurrentHashMap
  12. 基于模糊PID控制的光伏系统最大功率点跟踪的研究
  13. 银行信贷系统java_java毕业设计_springboot框架的银行信贷系统
  14. 魔法风云纪无限元宝公益服务器,好玩网页游戏 2678魔法风云纪sf 神兽助战卡免费获得...
  15. python+selenium实现QQ空间的登录
  16. 分布式系统架构的本质
  17. WIN10彻底禁用UAC(用户账户控制)
  18. QT5.12.0 程序在中标麒麟(neokylin)系统问题处理
  19. 解决Cuda out of memory的一种思路
  20. 元宇宙虚拟人迎来高峰期,哪个是你的最爱?

热门文章

  1. html如何做成绩单表格模板,怎么在word制作表格做成绩单
  2. 2018年全国卷Ⅲ卷理科数学解析版
  3. 如何在对话框中使用UPDATECOMMANDUI机制-
  4. 1500V直流系统如何计量电能?
  5. Macbook Air 2018将配备Retina屏!
  6. 暴击java7723_热血足球之暴力闯关版
  7. cocos2d-iphone之魔塔20层第十部分
  8. 机甲风暴java破解版下载,深度解析,值得收藏
  9. 态度决定一切,细节决定成败!
  10. 卫星通信3--卫星覆盖特性