Mybatis | 初识Mybatis

初识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.mzph.cn/news/692477.shtml

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

相关文章

【动态规划专栏】专题二:路径问题--------3.礼物的最大价值

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

算法模板 6.并查集

并查集 用于解决连通块问题。 判断集合个数也就是判断p[x] x 的个数 836. 合并集合 - AcWing题库 #include <bits/stdc.h> using namespace std; const int N 1e5 10; int p[N]; // 记录每个元素的father int n, m;int find(int x){ // 查询元素x的fatherif(p[x] …

[05] computed计算属性

computed计算属性 语法&#xff1a; 声明在 computed 配置项中&#xff0c;一个计算属性对应一个函数使用起来和普通属性一样使用 {{计算属性名}} 注意 computed配置项和data配置项是同级的computed中的计算属性虽然是函数的写法&#xff0c;但它依然是属性computed中的计算…

linux 修改开发板网卡eth0的ip地址

win10如何新增电脑ip地址&#xff1a; https://blog.csdn.net/linxinfa/article/details/105817473 ifconfig # 可设置网络设备的状态&#xff0c;或是显示目前的设置。 命令详解&#xff1a;https://www.runoob.com/linux/linux-comm-ifconfig.html 一、临时修改 ifconfig e…

MySQL篇之事务

一、事务 1.事务的定义 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 2.事务的特性 ACID的解释如下&#xff1a; 1. …

webpack实际实践优化项目

参考&#xff1a; 如何通过性能优化&#xff0c;将包的体积压缩了62.7% 雅虎35条 20210526-webpack深入学习&#xff0c;搭建和优化react项目 本文只专注于性能优化的这个部分。 总体来说分为两个方面&#xff1a;第一是开发环境中主要优化打包速度&#xff0c;第二是线上环境…

什么是特征值和特征向量?(done)

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV1…

怎么把Maven依赖的包都提取到文件夹

由于我用Maven只想借助他下载jar包和依赖&#xff0c;不想自己的程序编译还得依赖Maven&#xff0c;所以试验时候用Maven引用依赖&#xff0c;试验成功再拷贝jar包来本地引用&#xff0c;有时候依赖多&#xff0c;一个个拷贝就太慢了。所以要能批量把所有依赖jar提取出来。 加…

【C语言】长篇详解,字符系列篇2-----strcat,strcmp,strncpy,strncat,strncmp函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】长篇详解&#xff0c;字符系列篇2-----“混杂”的字符串函数&#xff0c;字符串函数的使用和模拟实现【图文详解】&#xff0c;图文讲解各种字符串函数&#xff0c;带大家更深刻理解C语言中各种字符串函数的应用&#xff…

LeetCode.589. N 叉树的前序遍历

题目 589. N 叉树的前序遍历 分析 我们之前有做过LeetCode的 144. 二叉树的前序遍历&#xff0c;其实对于 N 插树来说和二叉树的思路是一模一样的。 二叉树的前序遍历是【根 左 右】 N叉树的前序遍历顺序是【根 孩子】&#xff0c;你可以把二叉树的【根 左 右】想象成【根 孩…

【python】网络爬虫与信息提取--scrapy爬虫框架介绍

一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架&#xff0c;是python非常优秀的第三方库&#xff0c;也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库&#xff0c;而是一个爬虫框架。 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功…

AS-V1000 视频监控平台产品介绍:客户端功能介绍(四)

目 录 一、引言 1.1 AS-V1000视频监控平台介绍 1.2平台服务器配置说明 二、软件概述 2.1 客户端软件用途 2.2 客户端功能 三、客户端功能说明 3.1告警管理 3.1.1告警联动 &#xff08;1&#xff09;告警联动显示 &#xff08;2&#xff09;告警联动处理 3…

基于学习的参数化查询优化方法

一、背景介绍 参数化查询是指具有相同模板&#xff0c;且只有谓词绑定参数值不同的一类查询&#xff0c;它们被广泛应用在现代数据库应用程序中。它们存在反复执行动作&#xff0c;这为其性能优化提供了契机。 然而&#xff0c;当前许多商业数据库处理参数化查询的方法仅仅只…

Uibot (RPA设计软件)智能识别信息+微信群发助手(升级版)———课后练习2

解决痛点&#xff1a; Excel如何计算两个日期之间相差月数 方法&#xff1a; 1、首先打开要进行操作的Excel表格。 2、打开后选中要计算相差月数的单元格。 3、然后输入公式&#xff1a;DATEDIF(A2,B2,"m")&#xff0c;输入完成后点击回车键。 4、在弹出的窗口中&a…

Rancher实用篇-使用rancher,部署微服务应用

说到rancher&#xff0c;我们必须先了解一下k8s 一、k8s简介 Kubernetes&#xff08;通常简写为 K8s&#xff09;是一个开源的容器管理系统&#xff0c;由Google于2014年发起&#xff0c;并在2015年贡献给Cloud Native Computing Foundation (CNCF)进行维护。它基于Borg项目的…

202427读书笔记|《猫的自信:治愈系生活哲学绘本》——吸猫指南书,感受猫咪的柔软慵懒与治愈

202427读书笔记|《猫的自信&#xff1a;治愈系生活哲学绘本》——吸猫指南书&#xff0c;感受猫咪的柔软慵懒与治愈 《猫的自信&#xff1a;治愈系生活哲学绘本》作者林行瑞&#xff0c;治愈系小漫画绘本&#xff0c;10分钟可以读完的一本书&#xff0c;线条明媚&#xff0c;自…

量化巨头“卖空”被刷屏!网友:又一类量化策略要“收摊”了

量化圈遇到了龙年首宗“大事件”&#xff01; 2月20日晚间&#xff0c;沪深交易所同时出手对量化巨头灵均投资的异常交易行为进行“处理”。 沪深交易所均称发现灵均在2月19日开盘1分钟内&#xff0c;名下多个账户通过计算机程序自动生产交易指令&#xff0c;短时间大量下单卖…

公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)

公寓报修管理系统目录 目录 基于springboot公寓报修管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、住户管理 2、房间管理 3、维修人员管理 4、维修分类管理 5、物品信息管理 6、维修申请管理管理 四、数据库设计 1、实体ER图 五、核心代码 六、…

IO 作业 24/2/20

一、思维导图 二、习题 #include <myhead.h> int main(int argc, const char *argv[]) {FILE *fpNULL;FILE *fqNULL;pid_t pidfork();if(pid>0){if((fpfopen("./text.txt","r"))NULL){perror("fopen error");return -1;} if((f…

鸿蒙将与安卓应用形成“硬分叉”,多家平台急聘鸿蒙开发员

最近&#xff0c;网友注意到&#xff0c;多家企业公布了鸿蒙系统有关的岗位招聘。 11 月 8 日&#xff0c;美团发布了鸿蒙高级工程师、鸿蒙基建工程师等多个鸿蒙开发相关岗位。主要开发美团鸿蒙App、大众点评鸿蒙App。 根据脉脉平台&#xff0c;美团鸿蒙基建工程师岗位给出的…