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命令、获取映射器和管理事务等操作
  • 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.mzph.cn/news/707926.shtml

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

相关文章

docker的简介--安装--操作命令

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台,用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中,然后部署到任何支持Docker的环境中。Docker的主要特点包括…

【React架构 - Scheduler中的MessageChannel】

前序 我们都知道JS代码是在浏览器5个进程(下面有介绍)中渲染进程中的Js引擎线程执行的,其他还有GUI渲染线程、定时器线程等,而页面的布局和绘制是在GUI线程中完成的,这些线程之间是互斥的,所以在执行Js的同时会阻塞页面的渲染绘制…

android应用开发基础知识,安卓面试2020

第一章:设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章:程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…

用Java语言创建的Spring Boot项目中,如何传递List集合呢?

前言: 在上篇文章中,用Java语言创建的Spring Boot项目中,如何传递数组呢??-CSDN博客,我们了解到Spring Boot项目中如何传递数组,但是,对于同类型的List集合,我们又该如何…

高频更新使用sse好还是WebSocket

在实现高频更新的系统时,选择Server-Sent Events (SSE)还是WebSocket主要取决于应用的具体需求、数据传输的方向性、以及实现的复杂性。 一.Server-Sent Events (SSE) SSE是一种允许服务器向客户端发送更新的技术,但不允许客户端向服务器发送消息&…

Centos7:自动化配置vim | suoders信任列表添加普通用户

Centos7:自动化配置vim | suoders信任列表添加普通用户 vim 配置原理sudoers系统可信任列表中添加普通用户自动化配置vim vim 配置原理 在目录/etc下有一个vimrc文件,该文件是系统中公共的vim配置文件,对所有用户都成立。  而在每个普通用户…

【Kafka系列 06】Kafka Producer源码解析

温馨提示:本文基于 Kafka 2.3.1 版本。 一、Kafka Producer 原理图 生产者的 API 使用还是比较简单,创建一个 ProducerRecord 对象(这个对象包含目标主题和要发送的内容,当然还可以指定键以及分区),然后调…

Git 分布式版本控制系统

Git是一个分布式版本控制系统,可以记录项目文件的变动并管理项目的不同版本。以下是Git的基本概念和使用方式: 仓库(Repository):Git用仓库来存储项目文件。仓库可以是本地仓库,也可以是远程仓库&#xff0…

poi 设置允许西文在单词中间换行

说明本文是CSDN-问答模块,题主提问。问题描述:poi 设置允许西文在单词中间换行 一、问题描述 poi 设置允许西文在单词中间换行? // 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建段落XWPFParagraph firstParagraph = document.createParagraph();fir…

2022《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记2

A. Implementation Details 3D Distillation. 我们基于PyTorch实现。为了提取,我们使用Adam[26]作为优化器,初始学习率为1e−4,并训练100个epochs。对于MinkowskiNet,我们对ScanNet和Matterport3D实验使用2cm的体素大小,对nuScenes使用5cm的体素尺寸。对于室内数据集,我…

RTSPServer推流服务

RTSPServer推流服务 1.开发原因 由于项目需要使用,虽然有现成的RTSPServer推流服务,由于是闭源代码,无法查看了解内部的逻辑处理流程,所以急需要一套较为稳定并可以使用的推流服务,并且从网上看大部分的RTSPServer推流…

Java 18中简单 Web 服务器

从 Java 18 开始,我们可以访问JEP 408中引入的简单 Web 服务器。我们可以通过命令行工具和 API 访问其功能。 简单 Web 服务器提供了一个提供静态文件服务的基本 Web 服务器。它被描述为对于测试、原型设计和教育很有用。该服务器有意使其设置和运行非常简单&#…

Azure DevOps和Jira比较

最近需要对管理工具调研,客户现在使用范围较广的就是Azure DevOps,使用的是一个免费版本,需要对工具自身的特长和客户的使用情况,进行一个调研。 查了一下资料,还有客户现在的使用情况,做一个总结。 两者…

IntelliJ IDEA 常用快捷键和下载链接

下载链接(windows) 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 编码时: 跳转到引用方法的地方 (有多个引用时会出现下拉列表) ctrl鼠标左键 跳转后回到原来的地方 …

vscode windows 免密登录 powershell.sh

Linux 生成秘钥 ssh-keygenwindows powershell.sh $HOST_IP"zhang192.168.1.1" $PUBPATH"$HOME\.ssh\id_rsa.pub" $KEY(Get-Content "$PUBPATH" | Out-String); ssh "$HOST_IP" "mkdir -p ~/.ssh && chmod 700 ~/.ssh …

微信小程序 --- mobx-miniprogram miniprogram-computed

1.1 mobx-miniprogram 介绍 目前已经学习了 6 种小程序页面、组件间的数据通信方案,分别是: 数据绑定:properties获取组件实例:this.selectComponent()事件绑定:this.triggerEvent()获取应用实例:getApp(…

LeetCode 2120.执行所有后缀指令

现有一个 n x n 大小的网格,左上角单元格坐标 (0, 0) ,右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos ,其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…

动态给vue的data添加新属性页面不更新的原因分析以及解决方法

直接添加属性的问题 我们从一个例子触发 定义一个p标签&#xff0c;通过v-for指令进行遍历&#xff0c;然后通过绑定事件&#xff0c;触发事件的时候&#xff0c;将动态添加哟个属性。 预期结果&#xff1a;动态增加的属性也被遍历显示在页面上 <p v-for"(value,ke…

Android 15 第一个开发者预览版-Android15的新变化

版本说明 发布日期2024 年 2 月 16 日buildAP31.240119.016模拟器支持x86&#xff08;64 位&#xff09;、ARM (v8-A)安全补丁级别2024 年 2 月Google Play 服务2015 年 2 月 24 日API diffAPI 34 → V DP1 Android 15 将继续致力于构建一个平台&#xff0c;在帮助提高效率的…

后端程序员入门react笔记(六)- 讲透Promise与Fetch

js声明变量的三种方式 我们通常使用 var let 和const来声明js的变量&#xff0c;但是这三者有什么区别呢&#xff1f; var的变量可以是全局的或者函数作用域&#xff0c;而let和const只能是块级作用域var和let可以重新赋值&#xff0c;而const是不允许重新赋值的&#xff0c;…