MyBatis的工作流程是怎样的?

大家好,我是锋哥。今天分享关于【MyBatis的工作流程是怎样的?】面试题。希望对大家有帮助;

MyBatis的工作流程是怎样的?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

MyBatis 的工作流程可以分为几个主要的步骤,下面是一个概括性的流程:

1. 配置文件加载与初始化

MyBatis 的工作首先从加载配置文件开始。主要配置文件有:

  • mybatis-config.xml:这个配置文件包含 MyBatis 的核心配置,如数据库连接池、日志、插件等。
  • Mapper XML 文件:这些文件包含 SQL 语句和 Java 对象的映射关系。

加载配置文件时,MyBatis 创建一个 SqlSessionFactory 实例,它是 MyBatis 的核心对象,用于创建 SqlSessionSqlSession 是执行 SQL 语句的接口。

详细步骤:
  • MyBatis 加载 mybatis-config.xml 配置文件。
  • 创建 SqlSessionFactoryBuilder,然后加载配置文件,创建 SqlSessionFactory
  • 如果使用了注解方式,SqlSessionFactory 会扫描相关的 Mapper 接口并注册。

2. 获取 SqlSession 对象

一旦 SqlSessionFactory 创建完成,应用程序可以通过它获取 SqlSessionSqlSession 是 MyBatis 与数据库交互的核心对象,它用于执行 SQL 语句、获取映射的对象等。

  • SqlSession 是线程不安全的,因此它通常在每个线程中使用,且每个操作结束后需要关闭。
SqlSession session = sqlSessionFactory.openSession();

3. 执行映射操作

SqlSession 中,开发者通过调用 selectOne()selectList()insert()update()delete() 等方法来执行相应的 SQL 操作。这些方法会查找与之对应的 SQL 语句,然后将 SQL 执行并返回结果。

  • 对于 查询操作,MyBatis 会将查询结果映射为 Java 对象(POJO)。
  • 对于 增删改操作,MyBatis 会根据映射的 SQL 语句执行数据库操作。
查询(select)操作示例:
User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1);

在这个例子中,MyBatis 会根据提供的 UserMapper.selectUser 映射 SQL 来执行查询操作。

  • MyBatis 会根据 Mapper XML 文件中的 SQL 配置,将 SQL 和参数传递给数据库执行。

4. 映射结果集到 Java 对象

MyBatis 会将查询结果(通常是一个 ResultSet)自动映射到 Java 对象。它使用映射规则,将数据库中的列名与 Java 对象的属性进行匹配。

  • 如果是一个查询操作(select),MyBatis 会将查询到的每一行数据封装成一个 Java 对象(如 User)。
  • 如果查询返回多行数据,MyBatis 会将每一行数据映射成一个对象,并将它们封装在一个 List 或其他集合中。

5. 提交事务(可选)

如果 SqlSession 是在手动提交模式下创建的(openSession(false)),在执行完增删改操作后,需要显式提交事务:

session.commit();

这对于修改数据(insertupdatedelete)时是必需的。如果事务不提交,数据库中的修改操作不会生效。

6. 关闭 SqlSession

一旦数据库操作完成,应该关闭 SqlSession,以释放资源:

session.close();

通常,SqlSession 会在 try-with-resources 语句块中使用,以确保其正确关闭。

7. 使用缓存(可选)

MyBatis 支持缓存机制,可以缓存查询结果,从而提高性能。缓存有两种形式:

  • 一级缓存SqlSession 级别的缓存。对于同一个 SqlSession 中相同的查询,MyBatis 会缓存结果,避免重复查询。
  • 二级缓存SqlSessionFactory 级别的缓存。跨 SqlSession 共享的缓存,通常用来缓存一些查询结果,减少对数据库的访问。

8. 插件和拦截器(可选)

MyBatis 允许开发者通过插件来扩展其功能。例如,可以实现自定义的拦截器来监控 SQL 执行、日志记录、性能优化等。

总结 MyBatis 工作流程:

  1. 加载配置文件,创建 SqlSessionFactory
  2. 获取 SqlSession,通过它来执行数据库操作。
  3. 执行 SQL 操作,MyBatis 将 SQL 语句映射到 Java 对象。
  4. 处理查询结果,将数据库结果集映射成 Java 对象。
  5. 提交事务(如果有),对于增删改操作,事务需要提交才能生效。
  6. 关闭 SqlSession,释放资源。
  7. 使用缓存(如果配置),提高性能。

通过这样的流程,MyBatis 将 SQL 操作与 Java 对象的映射与执行分开,提供了灵活的数据库操作能力,同时保持了较高的性能和可定制性。

如果你有任何问题或者需要进一步的解释,随时告诉我!

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

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

相关文章

python-leetcode 25.环形链表

题目: 给定一个链表的头节点head,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(…

瑞芯微开发板/主板Android调试串口配置为普通串口方法 深圳触觉智能科技分享

本文介绍瑞芯微开发板/主板Android调试串口配置为普通串口方法,不同板型找到对应文件修改,修改的方法相通。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联…

Datawhale 组队学习 Ollama教程 task1

一、Ollama 简介 比喻:Ollama 就像是一个“魔法箱子”,里面装满了各种大型语言模型(LLM)。你不需要懂复杂的魔法咒语(配置),只需要轻轻一按(一条命令),就能让…

vulnhub 靶场 —— NullByte

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

使用 meshgrid函数绘制网格点坐标的原理与代码实现

使用 meshgrid 绘制网格点坐标的原理与代码实现 在 MATLAB 中,meshgrid 是一个常用函数,用于生成二维平面网格点的坐标矩阵。本文将详细介绍如何利用 meshgrid 函数生成的矩阵绘制网格点的坐标,并给出具体的代码实现和原理解析。 实现思路 …

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程) 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合,简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…

使用mermaid画流程图

本文介绍使用mermaid画流程图,并给出几个示例。 背景 目前,除有明确格式要求的文档外,笔者一般使用markdown写文档、笔记。当文档有图片时,使用Typora等软件可实时渲染,所见即所得。但如果文档接收方没有安装相关工具…

12.项目结构

后端结构 ruoyi-admin 项目启动的入口 提供了两种启动方式 1.RuoYiApplication基于springboot,内置tomcat,直接运行。 2.RuoYiServletInitializer将springboot项目打成一个war包,用外置的servlet容器来运行。 通用功能的controller 后台登录相关的、权限控制相关的、数据字…

基于springboot+vue的游戏创意工坊与推广平台的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

25自动化考研复试面试常见核心问题真题汇总,自动化考研复试面试有哪些经典问题?自动化考研复试难不难啊?

你是不是正在为考研自动化专业的复试发愁?担心准备不充分、表现不好?别慌!今天,学姐——复试面试拿下90分、成功上岸的学姐,来给大家分享备考秘诀。复试没那么可怕,只要掌握正确的方法,你也可以…

【HarmonyOS Next 自定义可拖拽image】

效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…

从0搭建卷积神经网络(CNN)--详细教学

目录 一、卷积神经网络介绍 1、简介 经典CNN架构 2、与传统神经网络区别 3、卷积神经网络的结构 (1) 卷积层(Convolutional Layer) (2) 激活函数(Activation Function) (3) 池化层(Pooling Layer) …

Jmeter对图片验证码的处理

Jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…

深入理解指针初阶:从概念到实践

一、引言 在 C 语言的学习旅程中,指针无疑是一座必须翻越的高峰。它强大而灵活,掌握指针,能让我们更高效地操作内存,编写出更优化的代码。但指针也常常让初学者望而生畏,觉得它复杂难懂。别担心,本文将用通…

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…

java配置api,vue网页调用api从oracle数据库读取数据

一、主入口文件 1:java后端端口号 2:数据库类型 和 数据库所在服务器ip地址 3:服务器用户名和密码 二、映射数据库表中的数据 resources/mapper/.xml文件 1:column后变量名是数据库中存储的变量名 property的值是column值的…

Python——批量图片转PDF(GUI版本)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

Photoshop自定义键盘快捷键

编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

C++ 学习:深入理解 Linux 系统中的冯诺依曼架构

一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠…

第四节 docker基础之---dockerfile部署JDK

本地宿主机配置jdk 创建test目录: [rootdocker ~]# mkdir test 压缩包tomcat和jdk上传到root/test目录下: 本机部署Jdk 解压jdk: [rootdocker test]# tar -xf jdk-8u211-linux-x64.tar.gz [rootdocker test]# tar -xf apache-tomcat-8.5.…