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)。你不需要懂复杂的魔法咒语(配置),只需要轻轻一按(一条命令),就能让…

错误报告:WebSocket 设备连接断开处理问题

错误报告:WebSocket 设备连接断开处理问题 项目背景 设备通过自启动的客户端连接到服务器,服务器将设备的 mac_address 和设备信息存入 Redis。前端通过 Redis 接口查看设备信息并展示。 问题描述 设备连接到服务器后,前端无法立即看到设…

vscode关闭后如何恢复在远程服务器的终端程序运行界面

网上有很多种解决方案,我觉得比较好用的是screen。这里先介绍screen的安装和使用办法: 通过 conda 安装 screen是比较方便的方式,可以按照以下步骤操作: 通过 Conda 安装 screen 打开终端或命令行工具。确保你已经激活了 Conda 环…

vulnhub 靶场 —— NullByte

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

React 初级教程

一、React 简介 React 是由 Facebook 开发的开源 JavaScript 库,用于构建用户界面(UI)。特点: 声明式编程:通过描述 UI 应该是什么样子(而不是操作 DOM)来构建界面。组件化:将 UI 拆分为独立可复用的组件。跨平台:支持 Web(React)、移动端(React Native)、VR 等。…

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

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

git tag的使用方法

1.添加tag git tag 2.添加tag并添加信息 git tag -a -m “your message” 3.查看tag git tag 4.推到远端 git push origin 5.推送所有本地标签到远程仓库 git push origin --tags 6.删除tag git tag -d 7.切换到某一个tag git checkout

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

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

使用mermaid画流程图

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

C# ASP.NET核心特性介绍

.NET学习资料 .NET学习资料 .NET学习资料 在当今的软件开发领域中,C# ASP.NET凭借其强大的功能和丰富的特性,成为构建 Web 应用程序的重要技术之一。以下将详细介绍 C# ASP.NET的核心特性。 多语言支持 ASP.NET 支持多种语言进行开发,这使…

使用Hexo部署NexT主体网站

一.使用git提交文件 参考: 从零开始搭建个人博客(超详细) - 知乎 致谢! 第一种:本地没有 git 仓库 直接将远程仓库 clone 到本地;将文件添加并 commit 到本地仓库;将本地仓库的内容push到远程仓…

12.项目结构

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

cursor如何使用到150次以及解决cursor限制问题

cursor白嫖免费版限制问题解决以后经常遇到只使用了50次额度就被限制了,软件提示you reached your trial。 解决方法 使用cursor的老版本,因为老版本有agent和normal可以切换,通过切换通往世界的IP,重启软件或者切换点几次agent和…

mmdetection3d环境部署

安装python库 pip install torch1.9.1cu111 torchvision0.10.1cu111 torchaudio0.9.1 -f https://download.pytorch.org/whl/torch_stable.html pip install mmengine pip install mmcv-2.0.0rc4-cp38-cp38-manylinux1_x86_64.whl pip install mmdet>3.0.0,<3.1.0 cd m…

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

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

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

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

用Kibana实现Elasticsearch索引的增删改查:实战指南

在大数据时代&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;和 Kibana 作为强大的数据搜索与可视化工具&#xff0c;受到了众多开发者的青睐。Kibana 提供了一个直观的界面&#xff0c;可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…

【HarmonyOS Next 自定义可拖拽image】

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