MyBatis 学习(一)之 MyBatis 概述

目录

1 MyBatis 介绍

2 MyBatis 的重要组件

3 MyBatis 执行流程

4 参考文档


1 MyBatis 介绍

        MyBatis 是一个半自动化的 ORM (Object-Relational Mapping,对象关系映射)持久层框架,它允许开发者通过 XML 或注解将对象与数据库中的记录建立映射关系,同时提供了灵活的 SQL 编写和参数设置功能。以下是 MyBatis 的一些详细介绍:

  • JDBC 代码简化:MyBatis 能根据不同的条件动态生成 SQL 语句,使用它可以避免编写大量的 JDBC 代码,如手动设置参数和检索结果集。MyBatis 通过配置和映射机制自动处理这些底层细节,从而简化了数据库操作的代码量
  • 参数传递:可以通过参数传递的方式,避免 SQL 注入攻击,提高了数据库操作的安全性
  • 存储过程:MyBatis 不仅支持基本的 SQL 查询,还支持存储过程的调用。这使得在数据库层面封装复杂逻辑成为可能,有助于提高应用程序的性能
  • 高级映射:MyBatis 提供了通过 XML配置文件或注解建立高级映射的功能,可以将数据库中的数据映射到 Java 对象,包括原语类型、接口和 POJO(Plain Old Java Object,普通老式 Java 对象),当然,也可以将原语类型、接口和 POJO 映射成数据库中的记录
  • 缓存机制:MyBatis  提供了一级和二级缓存机制,减少了对数据库的访问次数,提高了系统的性能
  • 插件机制:支持插件扩展,可以通过自定义插件来实现一些特定的功能,如分页、审计等

持久层和 ORM:

  • 持久 (Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
  • 持久层是指在软件系统中负责将数据持久化到数据库或其他存储介质中的那部分架构。它的主要任务是处理与数据库交互的逻辑,包括数据的读取、写入、更新和删除等操作
  • ORM 是一种将对象模型和关系型数据库进行映射的技术。通过 ORM,开发者可以使用面向对象的方式来操作数据库,无需直接编写复杂的 SQL 语句,而 MyBatis  仍需要编写 SQL 语句,因此,它是一个半自动化的 ORM 框架

2 MyBatis 的重要组件

  • Mybatis 的配置文件:SqlMapConfig.xml(名称可以任意) 是 Mybatis 的全局配置文件,主要配置数据源、事务、加载映射文件等。Mapper.xml,即 SQL 映射文件,主要是配置 Statement数据库操作的具体语句) 的相关信息,如 SQL 语句
  • SqlSessionFactoryBuilder:会根据 XML 配置或 Java 配置来生成 SqlSessionFactory 对象,采用分布构建的 Builder (建造者)模式。(简单来说就是分步构建一个大的对象,例如建造一个大房子,采用购买砖头、砌砖、粉刷墙面的步骤建造,其中的大房子就是大对象,一系列的建造步骤就是分步构建)
  • SqlSessionFactory:用于生成 SqlSession,可以通过 SqlSessionFactory.openSession() 方法创建 SqlSession 对象。SqlSessionFactory 使用工厂模式,是线程安全的,一旦被创建,可以在整个应用中重复使用来获取 SqlSession 实例,从而与数据库进行交互(工厂模式简单来说就是我们获取对象是通过一个类,由这个类去创建我们所需的实例并返回,而不是我们自己通过 new 去创建)
  • SqlSession:是与数据库交互的主要入口,相当于 JDBC 中的 Connection 对象,通过 SqlSessionFactory 获取 SqlSession 实例后,就可以执行SQL命令、获取映射器和管理事务等操作。SqlSession 的实例不是线程安全的,因此是不能被共享的。SqlSession 每次使用完后需要正确关闭,这个关闭操作是必须的
  • Executor:MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 执行的(Mapper:由 XML 文件和 Java 接口组成,根据 XML 中配置的映射信息执行对应的 SQL 语句并返回执行结果)
  • Mapper 接口数据操作接口,也就是通常说的 DAO 接口,要和 Mapper 配置文件中的方法一一对应,也就是必须和 Mapper.xml 中的增删改查标签 id 一致
  • Mapper 配置:用于组织具体的查询业务映射数据库的字段关系,可以使用 XML 格式(Mapper.xml)或 Java 注解格式来实现
  • MappedStatement封装了 Statement 的相关信息,包括 SQL 语句、输入参数和输出结果等。在 MyBatis 中,每个 Mapper.xml 文件中的 select、insert、update、delete 标签都会生成一个 MappedStatement 对象

3 MyBatis 执行流程

MyBatis的执行流程可以概括为以下几个关键步骤:

  1. 加载配置:MyBatis 启动时,会根据配置文件和 Java 代码的注解中加载 SQL 的配置信息。这些信息包括传入参数映射配置、执行的SQL语句、结果映射配置等,然后形成一个或多个 MappedStatement 对象,并存储在 Configuration 对象中
  2. 创建 SqlSessionFactory:通过读取的配置文件信息,MyBatis 会创建一个 SqlSessionFactory 实例。这个工厂类是线程安全的,一旦创建,可以在应用中重复使用来获取 SqlSession 实例
  3. 创建 SqlSession:SqlSession 是 MyBatis 中执行 SQL 命令的主要接口。通过 SqlSessionFactory 获取 SqlSession 实例后,可以通过它来执行 SQL 命令、获取映射器和管理事务等操作
  4. 解析映射器:当调用 Mapper 接口的方法时,MyBatis 会根据方法名找到对应的 MappedStatement 对象
  5. 执行 SQL:MyBatis 使用 Executor 接口的实现类来执行 SQL 语句。BaseExecutor 定义了基本的执行流程,而 CachingExecutor 在此基础上增加了缓存功能
  6. 结果映射:查询结果会被映射到 Java 对象中,这个过程依赖于 MappedStatement 中的结果映射配置
  7. 返回结果:最后,执行结果会返回给调用者

4 参考文档

Mybatis3详解(一)----Mybatis的介绍 - 唐浩荣 - 博客园 (cnblogs.com)

MyBatis的执行原理详细介绍 - aspirant - 博客园 (cnblogs.com)

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

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

相关文章

proteus8.15图文安装教程

proteus8.15版本可以用STM32系列单片机来进行仿真设计,比7.8版本方便多了,有需要的朋友们可以在公众号后台回复 proteus8.15 获取软件包。 1、下载好软件包,解压如下,右键proteus8.15.sp1以管理员身份运行。 2、第一次安装&#x…

获取tensorflow lite模型指定中间层的输出

以mobilenet v2为例子,我已经训练好了模型,有tflite格式和onnx格式两种模型的权重文件,我想获取tflite模型在推理阶段neck部分的输出。 查看onnx模型得到neck最后一层位置 使用netron查看onnx模型结构 从name中能知道Reshape是neck的最后一…

clickhouse 随心所欲的聚合模型-AggregatingMergeTree

clickhouse 强大的 MergeTree 系列引擎令人信服,其 ReplacingMergeTree、SummingMergeTree 在数据唯一性和汇总场景中表现非凡。但你是否还有保留最小(大)、平均等预聚合需求,甚至在一个模型中既有唯一性语意也有汇总、最小、最大、平均值语意该如何处理…

DBAPI如何使用数组类型参数

DBAPI如何使用数组类型参数 需求 根据多个id去查询学生信息 API创建 在基本信息标签&#xff0c;创建参数ids &#xff0c;参数类型选择 Array<bigint> 在执行器标签&#xff0c;填写sql&#xff0c;使用in查询 select * from student where id in <foreach ope…

Unity(第十一部)场景

游戏有多个场景组成&#xff08;新手村&#xff0c;某某副本&#xff0c;主城&#xff09; 场景是有多个物体组成&#xff08;怪物&#xff0c;地形&#xff0c;玩家等&#xff09; 物体是有多个组件组成&#xff08;刚体组件&#xff0c;自定义脚本&#xff09; 创建场景 编辑…

Folx Pro Mac中文p破解版如何使用?为您带来Folx Pro 详细使用教程!

​ Folx pro 5 中文版是mac上一款功能强大的老牌加速下载软件&#xff0c;新版本的Folx pro整体界面非常的简洁和漂亮&#xff0c;具有非常好用的分类管理功能&#xff0c;支持高速下载、定时下载、速度控制、iTunes集成等功能。Folx pro兼容主流的浏览器&#xff0c;不但可以下…

【卷积神经网络中用1*1 卷积有什么作用或者好处呢?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 1*1 卷积有什么作用或者好处呢 作用降维和增加非线性特征组合和交互网络的宽度和深度调整全连接替代增强…

09-认证-自研微服务框架

认证 1. 开启https支持 func (e *Engine) RunTLS(addr, certFile, keyFile string) {err : http.ListenAndServeTLS(addr, certFile, keyFile, e.Handler())if err ! nil {log.Fatal(err)} }1.1 测试 证书生成&#xff1a; 安装openssl 网站下载&#xff1a;http://slproweb…

华为HCIP Datacom H12-831 卷24

多选题 1、如图所示&#xff0c;某园区部署OSPF实现网络互通&#xff0c;其中Area1部署为NSSA区域。某工程师为了实现R1访问R4的环回口地址&#xff0c;在R4的OSPF进程中引入直连路由。以下关于该场景的描述,错误的有哪些项? A、在R4引入直连路由后&#xff0c;R1通过转换后的…

Socket网络编程(三)——TCP快速入门

目录 概述TCP连接可靠性1. 三次握手过程2. 四次挥手过程3. 为什么挥手需要四次&#xff1f; 传输可靠性TCP核心APITCP传输初始化配置&建立连接客户端创建Socket建立连接服务端创建ServerSocket监听连接ServerSocket 和 Socket的关系 Socket基本数据类型传输客户端数据传输服…

postman测试接口

1、postman测试接口 &#xff08;1&#xff09;首先安装postman 下载地址&#xff1a;Download Postman | Get Started for Free 选择对应版本下载&#xff0c;然后安装即可 &#xff08;2&#xff09;使用postman发送请求 比如以下这个请求例子&#xff1a; 使用postman发…

UE4 材质多张图片拼接成一张图片(此处用2×2拼接)

UE4 材质多张图片拼接成一张图片&#xff08;此处用22拼接&#xff09; //TexCoord,TextureA,TextureB,TextureC,TextureDfloat3 ReturnTexture TextureA; if(TexCoord.x < 0.5 && TexCoord.y < 0.5) {ReturnTexture TextureA; } else if(TexCoord.x > 0.5…

php docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

php把word转图片的方法:首先给服务器安装libreoffice;然后使用exec函数来调用命令行操作;最后通过“exec(“soffice --headless --invisible…””方法把word转图片即可。 服务器环境:centos7 *集成环境:宝塔 我们开始给服务器安装libreoffice 直接执行下面的代码就可以…

代码随想录Leetcode213. 打家劫舍 II

题目&#xff1a; 代码(首刷看解析 2024年2月29日&#xff09;&#xff1a; class Solution { public:int robRange(vector<int>& nums, int start, int end) {if (start end) return nums[start];vector<int> dp(nums.size(), 0); // 遍历dp[start] nums[s…

【Oracle】玩转Oracle数据库(七):RMAN恢复管理器

前言 嘿&#xff0c;数据库大魔法师们&#xff01;准备好迎接新的技术大招了吗&#xff1f;今天我们要探索的是Oracle数据库中的神奇利器——RMAN恢复管理器&#xff01;&#x1f6e1;️&#x1f4be; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;七&#xff09;&#xf…

mov和mp4格式哪个好?专业讲师告诉你答案【详】

在数字化时代&#xff0c;我们经常面临着选择视频格式的困境&#xff0c;尤其是需要在不同设备和平台上播放或分享视频时。在这些选择中&#xff0c;MOV和MP4格式是两种最常见的选项之一。 然而&#xff0c;mov和mp4格式哪个好呢&#xff1f;这个问题并不容易回答&#xff0c;…

C++重点---STL简介

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、STL简介 STL&#xff08;Standard Template Library&#xff09;是C标准库中的一个重要组成部分&#xff0c;它提供了…

LabVIEW水下温盐深数据一体化采集与分析

LabVIEW水下温盐深数据一体化采集与分析 开发一个基于LabVIEW的水下温盐深数据一体化采集与分析系统&#xff0c;实现海洋环境监测的自动化和精确化。通过集成温度、盐度和深度传感器&#xff0c;结合USB数据采集卡&#xff0c;利用LabVIEW软件开发的图形化界面&#xff0c;实…

理解计算着色器中glsl语言的内置变量

概要 本文通过示例的方式&#xff0c;着重解释以下几个内置变量&#xff1a; gl_WorkGroupSizegl_NumWorkGroupsgl_LocalInvocationIDgl_WorkGroupIDgl_GlobalInvocationID 基本概念 局部工作组与工作项 一个3x2x1的局部工作组示例如下&#xff0c;每个小篮格子表示一个工作项…

403页面绕过

403页面绕过 文章目录 403页面绕过姿势一: 端口利用姿势二&#xff1a;修改HOST姿势三&#xff1a;覆盖请求URL姿势四&#xff1a;Referer标头绕过姿势五&#xff1a;代理IP姿势六&#xff1a;扩展名绕过 姿势一: 端口利用 拿到客户给的地址后&#xff0c;首先进行信息收集。端…