首页 > 其他分享 >MyBatis 底层工作原理

MyBatis 底层工作原理

时间:2024-03-05 17:01:00浏览次数:24  
标签:对象 Executor 组件 Statement SQL MyBatis 原理 底层

引言

SqlSession 是 MyBatis 提供的面向用户的操作数据库 API。那么 MyBatis 底层是如何工作的呢?为了解开MyBatis的神秘面纱,我们需要了解一下MyBatis的其他几个比较核心的组件及这些组件的作用。

MyBatis 核心组件

MyBatis的执行流程及核心组件如图:

  • Configuration:用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这些信息时,也可以从Configuration对象中获取。
  • MappedStatement:MappedStatement用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中<select|update|delete|insert>等标签或者@Select/@Update等注解配置信息的封装。
  • SqlSession:SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口。
  • Executor:Executor是MyBatis的SQL执行器,MyBatis中对数据库所有的增删改查操作都是由Executor组件完成的。
  • StatementHandler:StatementHandler封装了对JDBC Statement对象的操作,比如为Statement对象设置参数,调用Statement接口提供的方法与数据库交互,等等。
  • ParameterHandler:当MyBatis框架使用的Statement类型为CallableStatement和PreparedStatement时,ParameterHandler用于为Statement对象参数占位符设置值。
  • ResultSetHandler:ResultSetHandler封装了对JDBC中的ResultSet对象操作,当执行SQL类型为SELECT语句时,ResultSetHandler用于将查询结果转换成Java对象。
  • TypeHandler:TypeHandler是MyBatis中的类型处理器,用于处理Java类型与JDBC类型之间的映射。它的作用主要体现在能够根据Java类型调用PreparedStatement或CallableStatement对象对应的setXXX()方法为Statement对象设置值,而且能够根据Java类型调用ResultSet对象对应的getXXX()获取SQL执行结果。

MyBatis 执行流程

了解了MyBatis的核心组件后,我们再来了解一下使用MyBatis操作数据库的过程。

  1. 在 MyBatis 框架的基本使用时,我们使用到了 SqlSession 组件,它是用户层面的 API。
  2. 实际上 SqlSession 是 Executor 组件的外观,目的是为用户提供更友好的数据库操作接口,这是设计模式中外观模式(或门面模式)的典型应用。
  3. 真正执行 SQL 操作的是 Executor 组件,Executor 可以理解为 SQL 执行器,它会使用 StatementHandler 组件对 JDBC 的 Statement 对象进行操作。
  4. 当 Statement 类型为 CallableStatement 和 PreparedStatement 时,会通过 ParameterHandler 组件为参数占位符赋值。
  5. ParameterHandler 组件中会根据 Java 类型找到对应的TypeHandler 对象,TypeHandler 中会通过 Statement 对象提供的 setXXX() 方法(例如setString()方法)为 Statement 对象中的参数占位符设置值。
  6. StatementHandler 组件使用 JDBC 中的 Statement 对象与数据库完成交互后,当 SQL 语句类型为 SELECT 时,MyBatis 通过 ResultSetHandler 组件从 Statement 对象中获取 ResultSet 对象,然后将 ResultSet 对象转换为 Java 对象。

参考文章链接:https://blog.csdn.net/qq_35946969/article/details/122987664

标签:对象,Executor,组件,Statement,SQL,MyBatis,原理,底层
From: https://www.cnblogs.com/binbingg/p/18053712

相关文章

  • 前端 vite 的原理
    很多前端框VUEReact都是使用webpack打包为何使用vitewebpack打包很慢,热更不友好一个模块的变化导致整个项目的重新编译vite真正的按需加载:利用浏览器ESM支持,实现真正的按需加载原理由于ES6的在浏览器的支持ESM可以只实现在浏览器直接使用import发送http请求......
  • 面试官:说说SpringAOP实现原理?
    AOP(Aspect-OrientedProgramming,面向切面编程)是一种编程技术,它允许开发者在不改变现有代码的情况下,增加新的功能或行为,这些功能或行为被称为“切面”。AOP可以通过预编译方式和运行期动态代理的方式来实现,它的主要目的是降低业务逻辑的耦合性,提高程序的可重用性和开发效率。AOP......
  • day07-Mybatis
    Mybatis用于操作数据库,简化jdbc开发入门JDBC操作操作型数据库的接口规范数据库连接池分配、管理数据连接基础操作删除参数占位符#{}#{}会替换为?,生成预编译sql,参数传递时使用优:性能更高、防止Sql注入${}直接拼接新增如果传入多个参数,可以封装到一个对象中进......
  • git原理性概念
    参考资料近期学习git内部概念及原理,为了加强效果和日后回忆,还是写了这篇笔记进行输出。参考资料如下:这才是真正的Git——Git内部原理-LZANE|李泽帆(靓仔)《VersionControlwithgit》实验环境:unbuntu18objects(blobstreecommitstag)&hashgit里的object有四种:tree......
  • BOSHIDA DC电源模块的工作原理及应用
    BOSHIDADC电源模块的工作原理及应用DC电源模块是一种常见的电子元件,它具有将交流电转换为直流电的功能。在很多电子设备中,尤其是需要稳定的直流电源供应的设备中,DC电源模块被广泛应用。 DC电源模块的工作原理可以简单描述如下:将输入的交流电转换为直流电。首先,交流电输入到......
  • vue2响应式原理
    Vue.js是一个流行的JavaScript前端框架,它的核心特性之一就是响应式数据绑定。Vue.js2.x版本的响应式原理主要基于Object.defineProperty函数来实现。Vue.js的响应式原理大致可以描述为以下几个步骤:数据劫持:当Vue实例创建时,Vue会遍历data选项中的属性,并使用Obje......
  • 在Docker中,资源限制原理是什么?
    在Docker中,资源限制主要是通过Linux内核的ControlGroups(cgroups)和Namespaces技术来实现的。1.ControlGroups(cgroups)cgroups是Linux内核的一个特性,它提供了一种机制来限制、记录、隔离进程组使用的物理资源(如CPU、内存、磁盘I/O等)。当Docker创建一个容器时,它会为该......
  • mybatis中<![CDATA[]]>的用法
    一、<![CDATA[]]>介绍在mybatis的xml映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[]]>来解决。<![CDATA[]]>是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。假如文本包含了很多的"<"......
  • 简易MyBatis-plus回顾
    一:要说到plus就得先回顾一下mybatis,我们为什么要要用到mybatis呢我认为大致是两点1.在项目开发中,查询数据库完了后返回值都是实体对象,那么通过mybatis可以实现自动封装这边补充一个当实体类和数据库表不一致时有三种处理方法 a:起别名b:result注解c:开启驼峰映射2.大大简化了......
  • 计算机基础知识问答:计算机组成原理篇
    冯诺依曼机的基本思想:冯诺依曼机的基本思想主要包括以下几点:存储程序:计算机内部设置存储器,程序和数据统一存放在存储器中,指令和数据均用二进制数表示。程序控制:计算机执行程序时,无需人工干预,能自动、连续地执行程序,并得到预期的结果。二进制运算:计算机内部以二进制......