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.hqwc.cn/news/480183.html

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

相关文章

从宏观到微观——泽攸科技ZEM系列台式扫描电子显微镜在岩石分析中的应用

岩石作为地球地壳的主要构成物质之一,其微观结构对于了解地质过程、资源勘探以及工程建设具有重要意义。按照岩石的成因,可以把它们分为三类:岩浆岩、沉积岩和变质岩。在地球表面,沉积岩占据75%的份额,而在地壳深度&am…

卡车拆解不再难:可视化示意图的魔力

随着科技的飞速发展和工业的不断进步,卡车作为物流运输的核心力量,承担着越来越多的运输任务。然而,当卡车出现故障或需要维护时,复杂的拆解流程往往让人头疼不已。这时,一份清晰易懂的卡车拆解示意图就显得尤为重要。…

解决本地googleapis 谷歌统计 nodejs 遇到 ECONNRESET和 ETIMEDOUT

在本地通过谷歌分析接口, 获取网站的访问量统计, 用于在管理端面板世界地图显示 获取分析数据的部分代码,这部分很简单示例有 // 获得前10个页面浏览量与页面标题在过去30天 const {BetaAnalyticsDataClient} require(google-analytics/data); const analyticsDataClient ne…

Linux 内存top命令详解

通过top命令可以监控当前机器的内存实时使用情况,该命令的参数解释如下: 第一行 15:30:14 —— 当前系统时间 up 1167 days, 5:02 —— 系统已经运行的时长,格式为时:分 1 users ——当前有1个用户登录系统 load average: 0.00, 0.01, 0.05…

数组的左旋和右旋算法

public class Test09 {public static void main(String[] args) {//右旋 数组逆序遍历,将尾部元素,不断交换至头部int[] arr {1,2,3,4,5,6,7,8};for(int i arr.length-1;i>0;i--) { //遍历一次arr[i] arr[i] ^ arr[i-1];arr[i-1] arr[i] ^ arr[i…

SpringCloud-基于Feign远程调用

Spring Cloud 是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是 Feign。Feign 是一种声明式的 Web 服务客户端,它简化了在 Spring Cloud 中进行远程调用的过程。本文将介绍如何在 Spring Cloud 中使用 Feign 进…

Security6.2 中的SpEL 表达式应用(权限注解使用)

最近学习若依框架,里面的权限注解涉及到了SpEL表达式 PreAuthorize("ss.hasPermi(system:user:list)"),若依项目中用的是自己写的方法进行权限处理, 也可以只用security 来实现权限逻辑代码,下面写如何用security 实现。…

回显服务器

. 写一个应用程序,让这个程序可以使用网络通信,这里就需要调用传输层提供的api,传输层提供协议,主要是两个: UDP,TCP,它们分别提供了一套不同的api,socket api. UDP和TCP UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字节流,全双工 一个客户端可以连接…

JZ65 不用加减乘除做加法(,^)

一&#xff1a;题目 二&#xff1a;思路 三&#xff1a;代码 int Add(int num1, int num2 ) {//ab (a ^ b)(a&b<<1)//num2 0 时表示没有进位了while(num2){int tmp num1;//得到不进位的数据num1 num2 ^ tmp;//得到进位的数据num2 (tmp&num2)<<1;}ret…

docker 启动镜像命令

Docker 的启动命令用于启动 Docker 容器。这些命令可以从基本的 docker run 命令扩展到包括多个选项和参数&#xff0c;以满足不同的需求。以下是一些常用的 Docker 启动命令和选项的示例&#xff1a; 启动一个新容器&#xff1a; docker run [OPTIONS] IMAGE [COMMAND] [ARG..…

已解决Application run failed org.springframework.beans.factory.BeanNot

问题原因&#xff1a;SpringBoot的版本与mybiats-puls版本不对应且&#xff0c;spring自带的mybiats与mybiats-puls版本不对应 这里我用的是3.2.2版本的SpringBoot&#xff0c;之前mybiats-puls版本是3.5.3.1有所不同。 问题&#xff1a;版本对不上 解决办法&#xff1a;完整…

STM32_ESP8266 连接阿里云 操作图解

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …