Mybatis | 初识Mybatis

news2025/1/12 18:09:09

初识Mybatis

目录:

  • 初识Mybatis
    • 什么是Mybatis?
    • Hibernate 和 MyBatis的区别?
    • Mybatis的下载和使用
    • Mybatis的工作原理

在这里插入图片描述

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权教材方可联系我,进行删除,如果雷同,纯属巧合)


什么是Mybatis?

  • MyBatis当前主流Java持久层框架之一,它与Hibernate一样,也是一种ORM框架。因其性能优异,且具有高度的灵活性可优化性易于维护等特点,所以受到了广大互联网企业的青睐,是目前大型互联网项目首选框架
  • MyBatis (前身iBatis )是一个支持普通SQL查询存储过程以及高级映射持久层框架 ( 即操作数据库框架)MyBatis 消除了几乎所有的 JDBC代码参数的手动设置以及对结果集的检索,并使用简单的XML注解进行配置原始映射,用以将接口 和 Java的POJO ( Plain Old Java Object,普通Java对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想操作数据库
  • MyBatis框架也被称之为ORM ( Object/Relational Mapping,即对象关系映射) 框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象数据库表之间的映射关系,自动将Java应用程序中的对象持久化关系型数据库的表中。
  • ORM框架工作原理如下图所示 :
    在这里插入图片描述
    从上图可以看出,使用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象( Persisent Object, PO),而ORM框架则会通过映射关系将这些面向对象操作换成底层的SQL操作
  • 常见的 ORM对象关系映射框架有 : HibernateMyBatis

Hibernate 和 MyBatis的区别?

  • Hibernate :
    是一个 全表映射的框架。通常开发者只需定义好持久化对象数据库表映射关系,就可以通过Hibernate提供的方法完成持久层操作。开发者并不需要熟练地掌握SQL语句的编写Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用 JDBC 接口来执行,所以其开发效率会高于MyBatis
    ( Hibernate 优点 : Hibernate开发效率高于Mybatis )

  • 然而Hibernate自身也存在着一些 缺点, 例如 它在多表关联时,对SQL查询支持较差② 更新数据时,需要发送所有字段 不支持存储过程; 不能通过优化SQL来优化性能等。这些问题导致Hibernate只适合在场景不太复杂对性能要求不高项目中使用
    ( Hibernate 缺点 : 只适合在常见不太复杂 且对性能要求不高项目中使用 )


  • MyBatis :

    是一个 半自动映射的框架。这里所谓的“半自动"是相对于Hibernate全表映射而言的,MyBatis 需要手动匹配提供POJO (普通java对象 )、SQL映射关系,而Hibernate 只需提供 POJO映射关系 即可。

  • Hibernate 相比,虽然使用MyBatis 手动编写sql语句要比使用Hibernate的工作量大,但是 MyBatis可以配置动态SQL优化SQL它还支持存储过程 等。对于一些复杂的和需要优化性能的项目来说,使用MyBatis更加合适
    ( MyBatis优点 : 适合在常见不太复杂 且对性能要求不高项目中使用,实际开发中,更倾向于使用Mybatis操作数据库 )

Mybatis的下载和使用

  • 使用Mybatis框架很简单,只需在 应用程序中引入Mybatis的核心包Mybatis的依赖包 (lib目录中的依赖包)即可

    Mybatis框架网址 : https://github.com/mybatis/mybatis-3/releases

    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述

    lib目录下的详细Jar包内容 如下:

    在这里插入图片描述

  • Mybatis网址 (可下载Mybatis核心包 和 Mybatis的依赖包)
    获得Mybatis核心包 和 Mybatis的依赖包 (百度网盘)
    jar包 / maven( 依赖 ) 下载( 可自行按需下载JAR )

    注意 :
    如果底层采用的是MySQL数据库,那么还需要将MySQL数据库的驱动JAR包添加到应用程序的径中;如果采用其他类型的数据库,则同样需要将对应类型的数据库驱动包添加到应用程序的类路径中。

Mybatis的工作原理

MyBatis框架操作数据库 时,大体经过了 8个步骤
在这里插入图片描述

  • 第一步、
    读取 Mybatis配置文件 (mybatis-config.xml ) :
    mybatis-config.xml 作为
    MyBatis
    全局配置文件,配置了MyBatis的 运行环境 等信息,配置文件 其中主要内容获取数据库连接

  • 第二步、
    加载
    映射文件 (Mapper.xml ) :
    Mapper.xml文件SQL映射文件该文件中配置了操作数据库SQL语句需要在mybatis-config.xml中加载才能执行mybatis-config.xml可以加载多个配置文件,每个配置文件对应数据库中一张表

  • 第三步、
    构造
    会话工厂 (SqlSessionFactory) : 通过MyBatis环境等配置信息构建会话工厂SqlSessionFactory

  • 第四步、
    构造 会话对象 (SqlSession) :由会话工厂创建SqlSession对象对象 (SqlSession) 中包含了执行SQL的所有方法

  • 第五步、
    Executor执行器 : MyBatis底层定义了一个Executor接口操作数据库,它会根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存维护

  • 第六步、
    MappedStatement对象 : 在Executor接口执行方法中,包含一个MappedStatement 类型参数,该参数是对映射信息封装,用于存储要映射的SQL语句id参数等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的 id 即是MappedStatement 的 id

  • 第七步
    输入映射 (Map、List类型、String、Integer等基本数据类型、POJO类型) : 在执行方法时,MapedStatement对象会对用户执行SQL语句的输入参数进行定义 (可以定义MapList 类型、基本类型POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数映射过程就 类似于 JDBC 编程中对 preparedStatement对象设置参数过程

  • 第八步、
    输出映射 (Map、List类型、String、Integer等基本数据类型、POJO类型) : 在数据库执行完SQL语句后MappedStatement 对象会对SQL执行输出的结果进行定义 (可以定义为MapList类型、基本类型POJO类型),Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射Java对象中。这种将输出结果映射到 Java对象的过程就类似于JDBC编程中对结果的解析处理过程

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

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

相关文章

牛客网 OR141 密码检查

答案&#xff1a; #include <stdio.h> #include <string.h> #include <ctype.h> int main() {int n 0;int count1 0, count2 0, count3 0;scanf("%d", &n);while (n--){char ch[100];scanf("%s", ch);int len strlen(ch);if (…

UE5 C++ UENUM 和 USTRUCT

一.首先在APawn里声明 UENUM 和 USTRUCT。UENUM 有两种定义方式 一种是使用命名空间&#xff1a; 还有是继承uint8&#xff1a; 通过申明class类 别名来替代 USTRUCT的定义 上面的第二种有类似但仍然有很多的差异&#xff1a; 首先要有GENERATED_USTRUCT_BODY()这个函数 并且…

element-ui 自定义表头label(利用 :slot=“header“ slot-scope=“slot“)

<el-table :data"Gbtable" border style"width: 100%"><el-table-column prop" date" label"责任方" align"center" ></el-table-column><el-table-column prop"name" label"柜名"…

图片文字编辑软件app分享5个!

在数字化时代&#xff0c;图片和文字的结合已经成为信息传播的重要形式之一。无论是制作精美的海报、设计独特的社交媒体封面&#xff0c;还是简单地为图片添加一些说明性文字&#xff0c;都离不开专业的图片文字编辑软件。今天&#xff0c;就让我们一起探索那些不可错过的图片…

ai自动证件照片制作的软件?分享3款先进工具!

随着科技的发展&#xff0c;我们的生活变得越来越便捷。尤其在图像处理领域&#xff0c;AI技术的应用更是让许多传统行业焕发出新的活力。其中&#xff0c;AI证件照制作工具就是近年来备受瞩目的创新产品。这些工具利用先进的AI技术&#xff0c;帮助用户在家中就能轻松制作出专…

【git 使用】使用 git rebase -i 修改任意的提交信息/合并多个提交

修改最近一次的提交信息的方法有很多&#xff0c;可以参考这篇文章&#xff0c;但是对于之前的提交信息进行修改只能使用 rebase。 修改提交信息 假设我们想修改下面这个提交信息&#xff0c;想把【登录】改成【退出登录】步骤如下 运行 git rebase -i head~3 打开了一个文本…

open3d 点云体素化

open3d 点云体素化 一、算法原理1.从点云到体素化&#xff08;主要函数&#xff09;2.从网格到体素化&#xff08;主要函数&#xff09; 二、代码三、结果1.从点云到体素化2.从网格到体素化 四、相关数据 一、算法原理 点云和三角网格是非常灵活但不规则的几何类型。体素网格是…

互联网大厂职级和薪资一览表!看看WebGIS能到多少级?

以上薪资来源网络&#xff0c;仅供参考。 我们再来看下这些大厂在招的webgis岗位薪资&#xff1a; 01. 华为职级和薪资水平 02. 华为WebGIS薪资 13-26K&#xff0c;经验不限 勉强能够上13级 03. 腾讯职级与薪资 04. 腾讯WebGIS薪资 13-35K&#xff0c;3-5年工作经验 范围挺…

linux系统---firewalld

目录 一、firewalld介绍 1.归入zone顺序 2.firewalld zone分类 3.预定义服务 二、图形化操作 1.打开firewalld图形化界面 2.以http服务为例&#xff0c;打开httpd服务 ​编辑 3.修改端口号 三、命令行配置 1.基础配置 2.查看现有firewalld设置 3.设置查看默认区 4.添…

【算法分析与设计】最大层内元素和

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层&#xff0c;而根节点的子节点位于第 2 层&#xff0c;依此类推。 请返…

进制hash

P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3370 解题思路 1.开辟一个链式结构的数组&#xff08;vector&#xff09; 2.给出一个固定进制x&#xff0c;将一个串的每一个元素看做一个进制位上的数字 3.输入字符…

【Larry】英语学习笔记语法篇——非谓语动词和从句是一回事

目录 非谓语动词和从句是一回事 不定式&#xff1a;名词/形容词/副词 1、不定式 名词属性的不定式&#xff1a;作为主语、表语、宾语 形容词属性的不定式&#xff1a;作后置定语 副词属性的不定式&#xff1a;作状语 副词属性的不定式&#xff1a;作插入语 不定式的逻辑…

微信小程序上线发布流程

1、上传代码 2、登录小程序管理后台-提交审批 3、登录小程序管理后台-发布 4、基于小程序码进行推广

Sora 和之前 Runway 在架构上的区别

问&#xff1a;Sora 和之前 Runway 那些在架构上有啥区别呢&#xff1f; 答&#xff1a;简单来说 Runway 是基于扩散模型&#xff08;Diffusion Model&#xff09;的&#xff0c;而 Sora 是基于 Diffusion Transformer。 Runway、Stable Diffusion 是基于扩散模型&#xff08…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么&#xff1f;二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化&#xff1a;BBBP数据库的PCA降维后可视化&#xff1a;BBBP数据库的UM…

【.NET Core】常见C#代码约定

【.NET Core】常见C#代码约定 文章目录 【.NET Core】常见C#代码约定一、概述二、代码预定的目标三、代码约束工具和分析器四、C#语言准则五、字符串约定5.1 使用字符串内插来连接短字符串5.2 插入大文本时&#xff0c;使用System.Text.StringBuilder对象 六、数组约定七、委托…

【Java】上传图片至阿里云oss服务器,文件上传以及图片base64上传

目录 引入maven依赖编写ossUtil编写Controller使用接口工具进行测试测试表单文件上传测试base64文件上传 首先需要在阿里云上开通oss服务&#xff0c;并获取到以下四个信息 endpoint: 购买的服务器节点地址accessKeyId: 接入的keyIdaccessKeySecret: 接入的key秘钥bucketName&…

Nginx操作

文章目录 Nginx使用操作1. 安装nginx2. docker启动nginx3. 目录介绍4. 更改站点内容&#xff0c;初试一下(此步骤可以省略)5. nginx配置文件结构5.1 http配置示例5.2 server配置 Nginx使用操作 服务器: ubuntudocker内操作nginx 1. 安装nginx # 1. 查询nginx版本 sudo docker…

ubuntu分辨率更改、开机被重置、ubuntu屏幕小

ubuntu分辨率更改 分辨率改成&#xff1a;1920x1200 xrandr --size 1920x1200 在此之前可以先输入 xrandr 看支持哪些分辨率 开机被重置 我已经设置成这样了&#xff0c; 一开机变回这个 ubuntu屏幕小 输入命令行 xrandr --size 1920x1200 这个下次重启ubuntu又会重置…

idea代码review工具Code Review Helper使用介绍

之前在团队里面遇到一个关于代码review的问题&#xff0c;使用gitlab自己的还是facebook的Phabricator&#xff0c;很难看到整体逻辑&#xff0c;因为业务逻辑代码可能不在这次改动范围内&#xff0c;在去源库中找不好找。针对这个刚需&#xff0c;在网上找了一个idea的代码工具…