初识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(对象关系映射)框架有 : Hibernate 和 MyBatis。
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语句的输入参数进行定义 (可以定义为Map、List 类型、基本类型和POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数的映射过程就 类似于 JDBC 编程中对 preparedStatement对象设置参数的过程。第八步、
输出映射 (Map、List类型、String、Integer等基本数据类型、POJO类型) : 在数据库中执行完SQL语句后,MappedStatement 对象会对SQL执行输出的结果进行定义 (可以定义为Map和List类型、基本类型、POJO类型),Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射至Java对象中。这种将输出结果映射到 Java对象的过程就类似于JDBC编程中对结果的解析处理过程。