mybatis 加载顺序

2023-11-19

1、加载配置文件,解析配置文件,MyBatis基于XML配置文件创建Configuration对象的过程
2、SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。创建SqlSessionFactoryBean,生产出来sqlSession,
3、SqlSession对象完成和数据库的交
a.使用传统的MyBatis提供的API;
 这是传统的传递Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession对象完成和数据库的交互;
b. 使用Mapper接口
 MyBatis 将配置文件中的每一个<mapper> 节点抽象为一个 Mapper 接口,而这个接口中声明的方法和跟<mapper> 节点中的<select|update|delete|insert> 节点项对应
4、Executor作为Mybatis的核心器,负责sql动态语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
MappedStatement  MappedStatement维护一条<select|update|delete|insert>节点的封装
5、Executor依靠MappedStatement  和数据库进行交互
1、加载配置文件(数据源,以及映射文件),解析配置文件,生成Configuration,MapperedStatement
2、通过使用Configuration对象,创建sqlSessionFactory,用来生成SqlSeesion
3、sqlSession通过调用api或者mapper接口传入statementId找到对应的MapperedStatement,来调用执行sql
4、通过Executor核心器,负责sql动态语句的生成和查询缓存的维护,来进行sql的参数转换,动态sql的拼接,生成Statement对象
5、借助于MapperedStatement来访问数据库,它里面封装了sql语句的相关信息,以及返回结果信息
(1)加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。
(3) SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。
(4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。
(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。

MyBATIS中有三种executor:
SimpleExecutor -- SIMPLE 就是普通的执行器。
ReuseExecutor -执行器会重用预处理语句(prepared statements)
BatchExecutor --它是批量执行器
这些就是mybatis的三种执行器。你可以通过配置文件的settings里面的元素defaultExecutorType,配置它,默认是采用SimpleExecutor如果你在Spring运用它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis 加载顺序 的相关文章

随机推荐

  • 机器学习:k近邻算法(KNN)介绍

    k近邻算法是一种最简单最经典的机器学习算法之一 该算法的原理为 当对测试样本进行分类时 首先通过扫描训练样本集 找到与该测试样本最相似的k个训练样本 根据这个样本的类别进行投票确定测试样本的类别 也可以通过个样本与测试样本的相似程度进行加权
  • 并发编程(二)——内存模型

    前言 欢迎大家一起来学习多线程 大家一起来学习吧 并发编程 一 多线程快速入门 并发编程 二 内存模型 并发编程 三 多线程之间如何实现通讯 并发编程 四 JUC并发包常用方法介绍 并发编程 五 线程池及原理剖析 并发编程 六 java中锁
  • linux给用户添加sudo权限

    切换到拥有sudo权限的用户下 输入命令 sudo vim etc sudoers 开始编辑 etc sudoers文件 找到 root ALL ALL ALL ALL 这一 行 在它下面添加 xxx ALL ALL ALL ALL 这里的
  • 数组对象在ts中的用法

    数组对象在TS中的用法 length长度 let songs string red blue pink console log songs length push push 方法将一个或多个元素添加到数组的末尾 并返回该数组的新长 3 fo
  • Unity3D 性能优化

    优化思路 个人优化原则 三原则 注意细节 注意细节 注意细节 优化手段 1 善于使用工具 2 减少总量 3 空间 时间互换 4 由浅入深 1 善于使用工具 一定要善于使用工具来分析性能问题 Profiler 先找出性能瓶颈再做优化 2 减少
  • 菜鸟教程《Python 3 教程》笔记(19):错误与异常

    菜鸟教程 Python 3 教程 笔记 19 19 错误和异常 19 1 assert 断言 19 2 异常处理 19 2 1 try except 19 2 2 try except else 19 2 3 try finally 语句
  • JAVA获取类的类对象的三种方式

    自定义一个类 MyClass 并声明该类的对象 class MyClass MyClass mClass1 new MyClass 1 2 3 在上面说过 Class 类的构造方法是私有的 只有 java 虚拟机可以调用该方法创建该类的对象
  • Linux下Qt 5.15.2源码下载及编译

    一 下载 Qt的官方下载地址 Qt Downloads Qt 5 15 2源码下载路径 archive qt 5 15 5 15 2 single qt everywhere src 5 15 2 zip 二 编译源码 Qt官网提供了编译前
  • Verilog的基础知识

    Verilog的基本介绍 硬件描述语言发展至今已有二十多年历史 当今业界的标准中 IEEE标准 主要有VHDL和Verilog HDL 这两种硬件描述语言 一个设计往往从系统级设计开始 把系统划分成几个大的基本的功能模块 每个功能模块再按一
  • centos6.5linux安装docker之升级内核

    1 没有ssl 安装之 yum y install curl nss openssl 2 升级内核 参考博文https blog csdn net lvshuocool article details 79540617 1 gt 导入pub
  • DTD && Schema

    XML约束简介 XML文档都是自定义标签 所以编写起来比较随意自由 所以我们要给XML文档创建一个规则 我们需要在遵守相应的规则的前提下来编写XML文档 XML约束共有两种形式 DTD Schema DTD 文档类型定义 DTD可以定义文档
  • 【万字总结篇】C++STL常用算法详解(错等年系列)

    写在前面 本小菜鸟是一名热爱编程的大二在校生 目前主要精力放在学习C 数据结构和算法上 目前C 这个专栏的博客我已经总结完了C 常用的容器 内置函数对象 仿函数 还有此篇常用的内置算法 都是一些C STL的内容 因为这部分内容不难 并且需要
  • git fetch & git pull 总结

    一 git fetch git pull 图解 最开始 github 上存放着我们的远程仓库代码 然后在本地通过 git clone 命令 将远程仓库拉取到本地仓库 此时 本地仓库的 origin master 的内容 是远程仓库 mast
  • AS配置NDK开发环境,附CMake、NDK-build构建工具用法

    注意 Android Studio需要是1 3及以上版本 且版本号小于2 2 见文末说明 步骤1 新建一个项目 打开Project Structure 设置Android NDK Location目录 如果没有提前下载NDK包 可打开SDK
  • 分享两种实现图片验证码校验登录方法

    第一种使用ValidateCode实现验证码 ValidateCode是第三方依赖包 我们要先通过命令行引用一下 1 添加jar包到本地仓库 mvn install install file DgroupId cn dsna util im
  • 使用python暴力破解ZIP、7Z 、RAR格式压缩包密码教程

    使用python暴力破解ZIP 7Z RAR格式压缩包密码教程 目录 使用python暴力破解ZIP 7Z RAR格式压缩包密码教程 一 摘要 二 使用zipfile包暴力破解ZIP 7Z格式压缩包密码 三 使用unrar包暴力破解RAR格
  • 面试官问:如何快速开发一个类似微信的聊天系统?

    去年我们公司要我去面试一位候选人 当时刚好我接手了公司的 IM 系统 借这个机会 就问了候选人这个问题 如何快速开发一个类似微信的聊天系统 这个问题的确让候选人回答起来很吃力 从分析 PC 端微信界面的实现到怎么处理框体也业务代码分离 从通
  • hibernate学习之hibernate的入门

    hibernate 可能对于我并不是很陌生 一个基于面向对象来操作SQL语句的框架 也就是一种ORM框架 在Java对象与关系型数据库之间建立某种映射 来实现直接存取Java对象 特点 将对数据库的操作直接转换为Java对象的操作 简化开发
  • flvplayer.swf flv视频播放器使用方法

    今天由于网页上要加入一个视频文件 就研究了一下flv视频播放器flvplayer swf 一 直接在html文件中加载 复制代码代码如下 div div
  • mybatis 加载顺序

    1 加载配置文件 解析配置文件 MyBatis基于XML配置文件创建Configuration对象的过程 2 SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象 然后根据Configurati