[Spring]MyBatis的执行原理

news/2024/12/22 13:36:45/文章来源:https://www.cnblogs.com/DCFV/p/18402665

MyBatis的执行原理详细介绍
为了使大家能够更加清晰的理解MyBatis程序,在正式讲解MyBatis入门案例之前,先来了解一下MyBatis程序的工作原理,如图1所示。

MyBatis的工作原理

image

从图1可以看出,MyBatis框架在操作数据库时,大体经过了8个步骤。下面就对图1中的每一步流程进行详细讲解,具体如下。

  • (1)读取MyBatis配置文件mybatis-config.xml。mybatis-config.xml作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其中主要内容是获取数据库连接

  • (2)加载映射文件Mapper.xml。Mapper.xml文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。mybatis-config.xml可以加载多个配置文件,每个配置文件对应数据库中的一张表。


  • (3)构建会话工厂。通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。

  • (4)创建SqlSession对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL的所有方法。


  • (5)MyBatis底层定义了一个Executor接口来操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存的维护。

  • (6)在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用来存储要映射的SQL语句的id、参数等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是MappedStatement的id。


  • (7)输入参数映射。在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义(可以定义为Map、List类型、基本类型和POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数的映射过程就类似于JDBC编程中对preparedStatement对象设置参数的过程。

  • (8)输出结果映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义(可以定义为Map和List类型、基本类型、POJO类型),Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射至Java对象中。这种将输出结果映射到Java对象的过程就类似于JDBC编程中对结果的解析处理过程。

通过上面对MyBatis框架执行流程的讲解,相信读者对MyBatis框架已经有了一个初步的了解。对于初学者来说,上面所讲解的内容可能不会完全理解,现阶段也不要求读者能完全理解,这里讲解MyBatis框架的执行过程是为了方便后面程序的学习。在学习完MyBatis框架后,读者自然就会明白上面所讲解的内容了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793961.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逐月信息学——2024初秋集训——提高组 #22

A. 牛牛的方程式 题目描述 给定一个三元一次方程 \(ax+by+cz=d\),求该方程是否存在整数解。 思路 由于若干个 \(a,b,c\) 只能凑出 \(\gcd (a,b,c)\) 的倍数,所以只需判断 \(d\) 是否为 \(\gcd(a,b,c)\) 的倍数即可。特别的,若 \(a,b,c\) 均为 \(0\),则显然只有 \(d=0\) 时存…

在VScode-SSH中Rust工程不能代码间跳转的原因

今天正常使用VScode-SSH访问虚拟机,但是发现读代码的时候不能使用ctrl+左键的方式跳转,然后看到Rust-Analyzer(VScode的Rust语言插件)报错. 2024-09-08T02:25:28.998500Z ERROR failed to find any projects in [AbsPathBuf("/home/winddevil/App")] 2024-09-08T02:2…

VsCode+WSL2+Python3+git机器学习环境安装

安装VsCode,添加WSL扩展插件用管理员权限打开PowerShellwsl --install此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 发行版所需的功能 wsl --set-version <distro name> 2命令将 替换为要更新的 Linux 发行版的名称,如wsl --set-version Ubuntu 2 会将 Ubuntu设置为使…

English Level A, B, C All In One

English Level A, B, C All In One 英语等级 A、B、CEnglish Level A, B, C All In One英语等级 A、B、CEnglish level A1 A2 B1 B2 C1 C2 The CEFR and EF SETB1 LevelB1 Intermediate / 中级 EF SET 41-50https://www.efset.org/cefr/b1/B2 LevelB2 Upper intermediate / 中上…

自动化运维工具之WGCLOUD使用操作指南,为服务器安全保驾护航

WGCLOUD官网下载安装包:www.wgstart.com 1、部署WGCLOUD运行的前置条件说明WGCLOUD包括:server为服务端(或主控端),agent为客户端(探针端、被控端)WGCLOUD的server和agent,可以部署在已有业务运行的主机,不要求主机是纯净的操作系统。当然了,纯净的系统也可以部署WG…

C# kvaser can 通讯

1、查看官方文档https://kvaser.com/canlib-webhelp/section_install_windows.html 2、安装can windows驱动 https://www.kvaser.com/downloads-kvaser/?utm_source=software&utm_ean=7330130980013&utm_status=latest 3、安装canlib https://www.kvaser.com/downloa…

Cursor一键导入vscode插件以及设置

在cursor中找到 setting-- general -- vscode import 导入配置,一键导入即可

时间序列结构变化分析:Python实现时间序列变化点检测

平稳性是时间序列分析与预测的核心概念。在平稳条件下,时间序列的统计特性(如均值)在时间维度上保持不变,仅存在随机波动。 但是实际数据集中很少观察到完全的平稳性。时间序列通常会经历结构性断裂或变化。这些变化会引入非平稳性,从而改变时间序列的整体分布,这些标志着…

RuoYi框架部分历史漏洞

RuoYi框架部分历史漏洞 生产环境搭建(代码审计)项目地址:若依 (y_project) - Gitee.com 官方文档:RuoYi项目构成 因为RuoYi框架是基于SpringBoot搭建的,所以我们启动项目时不用像SpringMVC那样去配置我们的服务器然后把项目放到服务器上启动。我们成功导入项目之后会生成一些…

ROS话题通信和服务通信的区别

话题和服务是 ROS 中使用最多的通信方法,它们之间有很多不同之处: