MyBatis 学习(一)之 MyBatis 概述

news2024/10/5 15:27:29

目录

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.coloradmin.cn/o/1477055.html

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

相关文章

STM32进阶笔记——复位、时钟与滴答定时器

本专栏争取每周三更新直到更新完成,期待大家的订阅关注,欢迎互相学习交流。 目录 一、复位1.1 软件复位1.2 低功耗管理复位 二、时钟2.1 系统时钟(SYSCLK)选择2.2 系统时钟初始化 三、滴答定时器(Systick)3.1 SysTick部分寄存器3.…

docker中hyperf项目配置虚拟域名

在使用hyperf框架时,直接用了docker环境进行开发 下载镜像运行容器 docker run --name hyperf -v /data/project:/data/project -p 9501:9501 -itd -w /data/project --privileged -u root --entrypoint /bin/sh 镜像ID配置docker-compose.yml version: "3.…

python-产品篇-图形验证码

文章目录 准备代码效果 准备 代码 from tkinter import * from tkinter.messagebox import * import time import os root Tk() import random dirall[] randima []def call():global image1global image2global image3global image4global image5global seloneglobal …

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros,借助开源的sawForceDimensionSDK实现对于数据的封装和可视化,方便后续使用 链接: GitHub - jhu-saw/sawForceDimensionSDK 具体步骤: 安装qt和ros,官网下载Force Dimension SDK …

Win10系统如何关闭边缘滑动功能?Win10关闭边缘滑动功能方法

Win10系统如何关闭边缘滑动功能?Win10系统支持电脑端和平板等移动设备,所以具有触控操作的功能,较为常见的就是边缘滑动手势功能,但有小伙伴想了解是否可以设置关闭,具体该如何设置呢? 设置方法 1、首先&…

idea2023新UI风格不见了怎么办?

用了一段时间idea2023,有一天不知道点了什么,整个UI又变成了2022的风格 如果想换成2023的UI风格怎么办? 点击file->setting->new UI->勾选Enable new UI,restart就可以回到最新版本的UI了 新风格

groovy:XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。 强大的节点功能,不仅仅节点的种类很多&#xff…

Python爬虫项目实战案例-批量下载网易云榜单音乐保存至本地

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

数学学习与研究杂志社《数学学习与研究》杂志社编辑部2023年第29期目录

考试研究 提高高三数学二轮复习质量的思考与实践 佘淮青; 2-4 提升高三数学复习质量的策略探究 王飞; 5-7 核心素养背景下的高中数学命题策略研究 陈明发; 8-10 提升中考数学复习课的有效性研讨 韩兴宏; 11-13 中学教学方法《数学学习与研究》投稿:…

React入门之React_渲染基础用法和class实例写法

渲染元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>04元素渲染</title><script src&…

迟到的VNCTF2024逆向题WP

这次比赛因为有事外出&#xff0c;只做了前两题&#xff0c;最近有空才把另外3题也做出来&#xff0c;总体来说比以往的VNCTF逆向题目要难一些。当然也有可能是我水平退步了&#xff0c;就算有时间参加比赛&#xff0c;应该也做不完这5题。VN的小伙伴越来越厉害了&#xff0c;出…

Python + Google AI 自动修复 Sonar Bug 实践

前言 在工作中总会遇到种种不期而至的需求&#xff0c;比如前段时间突然要修复所有 Sonar Bug&#xff0c;涉及各种琐碎的代码风格问题&#xff0c;包括但不限于语法不规范、废弃注释等问题。这些项目都已经持续开发几年了&#xff0c;Sonar 上的问题层出不穷&#xff0c;各种…

汽车三元催化器的废品项目详解,三元催化再生项目的回收技术教学

一、教程描述 这是一个收废品项目&#xff0c;就收那些别人不懂的&#xff0c;三元催化器的附加值高&#xff0c;只要掌握技术&#xff0c;怎么玩都行的&#xff0c;只是要放得下你的面子。三元催化器&#xff0c;是安装在汽车排气系统中最重要的机外净化装置&#xff0c;它可…

Python 神经概率语言模型代码实现和详解,NPLM代码实现和详解;NPLM代码模板讲解,最简单的NLP预测模型

1.神经概率语言模型&#xff1a;NPLM NPLM&#xff08;Neural Probabilistic Language Model&#xff09;是一种经典的神经概率语言模型&#xff0c;被用于自然语言处理任务中。它使用神经网络来学习词汇之间的关系&#xff0c;通过计算词汇序列的概率分布来预测下一个词汇。N…

论文设计任务书学习文档|基于Web的个性化简历职位推荐系统的设计与实现

文章目录 论文(设计)题目:基于Web的个性化简历职位推荐系统的设计与实现1、论文(设计)的主要任务及目标2、论文(设计)的主要内容3、论文(设计)的基本要求4、进度安排论文(设计)题目:基于Web的个性化简历职位推荐系统的设计与实现 1、论文(设计)的主要任务及目标…

log4j 基础使用入门教程

一、Log4j介绍 在项目中&#xff0c;不管是开发人员写代码还是测试人员写的测试代码一般都需要做一些日志来记录项目的行为&#xff0c;以便更好的跟踪项目中的一些交互和问题。 Log4j ( Logger For Java ) , Java 日志的记录包。 官方网站 。Log4j 是 Apache 的一个开源项目…

理解C转汇编后代码分析

题目 . - 力扣&#xff08;LeetCode&#xff09; 解题代码 #include <stdio.h> #include "stdbool.h"typedef struct {int score;int index;int count; } Record; Record records[26] {0};int totalScore(char *w) {int total 0;for (int i 0; i < st…

程序员的金三银四/金九银十求职宝典

目录 金三银四&#xff0c;金九银十 方向一&#xff1a;面试技巧分享 方向二&#xff1a;面试题解析 方向三&#xff1a;公司文化解读 方向四&#xff1a;职业规划建议 方向五&#xff1a;成功案例展示 方向六&#xff1a;行业趋势分析 金三银四&#xff0c;金九银十 “金…

Docker制作lamp镜像并在其他机器上部署

为了方便将自己的LAMP运行环境和项目在其他机器上部署或发布&#xff0c;可以用基于Dockerhub 里的mattrayner/lamp镜像打包自己需要的镜像。 1、先选择合适的镜像文件 镜像mattrayner/lamp有多个版本&#xff0c;根据自己需要选择下载 2、镜像在首次运行时会自动下载&#x…

vue3 图片/视频 加载失败重试

vue3 图片/视频 加载失败重试 需求背景 用户手机上传图片走oss &#xff0c;在pc端在线客服连接socket 需要实时推送消息&#xff0c;接受到消息后&#xff0c;由于oss还回没有回调成功&#xff0c;所以图片/视频不能及时展示&#xff0c;所以做了一个失败重试的功能 效果图 技…