首页 > 其他分享 >MyBatis 基本工作原理

MyBatis 基本工作原理

时间:2022-12-05 15:46:43浏览次数:36  
标签:基本 语句 映射 对象 SqlSession SQL MyBatis 原理

核心流程

MyBatis 应用程序通过 SqlSessionFactoryBuilder 从 mybatis-config.xml 配置文件中构建出 SqlSessionFactory,然后 SqlSessionFactory 的实例直接开启一个 SqlSession,再通过 SqlSession 实例获得 Mapper 对象并运行 Mapper 映射的 SQL 语句,完成对数据库的 CRUD 和事务提交,之后关闭 SqlSession。如下图所示:

 

 

上面中流程就是 MyBatis 内部核心流程,每一步流程的详细说明如下文所述:

(1)读取 MyBatis 的配置文件。mybatis-config.xml 为 MyBatis 的全局配置文件,用于配置数据库连接信息。
(2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
(3)构造会话工厂。通过 MyBatis 的环境配置信息构建会话工厂 SqlSessionFactory。
(4)创建会话对象。由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。
(5)Executor 执行器。MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
(6)MappedStatement 对象。在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
(7)输入参数映射。输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。
(8)输出结果映射。输出结果类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

 

如何掌握 MyBatis 的原理

要结合 JDBC 来理解 MyBatis 的工作原理往往才能更透彻。我们知道,JDBC 有四个核心对象:
(1)DriverManager,用于注册数据库连接
(2)Connection,与数据库连接对象
(3)Statement/PrepareStatement,操作数据库SQL语句的对象
(4)ResultSet,结果集或一张虚拟表

而 MyBatis 也有几大核心对象:
(1)SqlSession 对象,该对象中包含了执行SQL语句的所有方法【1】。类似于JDBC里面的Connection 【2】。
(2)Executor 接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。
(3)MappedStatement 对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler 对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。
(5)Configuration 对象,大管家,是所有配置的载体,也是四大对象(Executor、StatementHandler、ParameterHandler 和 ResultHandler)的创建工具。

 

标签:基本,语句,映射,对象,SqlSession,SQL,MyBatis,原理
From: https://www.cnblogs.com/steven-note/p/16952464.html

相关文章

  • vue中proxy解决跨域的原理
    vue中proxy解决跨域的原理浏览器是禁止跨域的,但是服务端不禁止,在本地运行npmrundev等命令时实际上是用node运行了一个服务器,因此proxyTable实际上是将请求发给自己的服务......
  • postgresql序列基本操作
    1、创建序列CREATESEQUENCEifnotexiststest_mergetable_id_seqINCREMENT1MINVALUE1MAXVALUE999999999START1CACHE1;//或者:createsequenceifnotexis......
  • Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
    〇、参考资料1、hutool介绍2、SpringBoot+Mybatis实现登录注册3、SpringBoot读取自定义配置文件​​https://www.yisu.com/zixun/366877.html​​4、SpringBoot读取prope......
  • MyBatis-Plus实现分页
    一、分页插件实现分页功能MyBatisPlus自带分页插件,进行配置即可实现分页功能1.1.添加配置类在com.augus下创建config包,存放配置类,创建配置类  mybatisPlusInterceptor,内......
  • UVC设备端驱动的实现原理分析
    UVC工作原理:关于UVC的实现方式,UVC驱动分为设备端和主机端,根据linux内核的实现,貌似设备端的实现源码头部的版本信息描述为“USBVideoClassGadgetdriver”,而主机端的实......
  • MYBATIS中if test中注意的事项
    ​​http://www.jianshu.com/p/91ed365c0fdd​​​现有一项目,ORM框架使用MyBatis,在进行列表查询时,选择一状态(值为0)通过动态SQL拼接where条件但无法......
  • 源码解析:Dubbo3 的 Spring 适配原理与初始化流程
    Dubbo国内影响力最大的开源框架之一,非常适合构建大规模微服务集群的,提供开发框架、高性能通信、丰富服务治理等能力。同时Dubbo无缝支持Spring、SpringBoot模式的开......
  • 计算机组成原理(day0)
    1.计算机的硬件组成1.1冯诺依曼机内存的产生:结构框图:特点:1.2现代计算机结构1.3小节2.基本硬件2.1主存储器基本模型类比模型(读取数据)2.1.1储存体地址->MAR(通过MAR访问需要的......
  • mybatis之xml映射文件>、<=等特殊符号写法
    前言在使用mybatis框架进行开发时,编写sql少不了<=,>=,>,<,<>等比较符号,但是直接在mapper文件中,直接使用这些符号是不行的,此时就需要对类似于这种的符号进行转换。正文直接符......
  • 线程池原理
    (92条消息)一文读懂线程池的实现原理_老周聊架构的博客-CSDN博客_线程池原理 博客下载学习社区GitCode云服务猿如意  搜索会员中心 <img......