Java-01 深入浅出 MyBatis - MyBatis 概念 ORM映射关系 常见ORM 详细发展历史

点一下关注吧!!!非常感谢!!持续更新!!!

大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html

目前已经更新到了:

  • MyBatis(正在更新)

对象/关系映射 ORM

ORM 全称 Object/Relation Mapping:表示对象-关系映射的缩写

ORM 完成面向对象的编程语言 DAO 关系数据库的映射,当 ORM 框架完成映射后,程序员既可以利用面向对象程序设计语言的简易易用性,又可以利用关系数据库的技术优势。

ORM 把关系数据库包装成面向对象的模型,ORM 框架是面向对象设计语言与关系数据库发展不同步的中间解决方案。采用 ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而 ORM框架则将这些面向对象的操作转换成底层 SQL。

ORM 框架实现的效果:把对持久化对象的保存、修改、删除等操作转换为对数据库的操作。

对象/关系映射(ORM,Object-Relational Mapping)是一种技术,它通过在对象导向编程语言(如Java、Python、C#等)与关系型数据库之间提供一个"映射"层,简化了数据库操作。ORM的主要目标是使开发人员可以通过操作对象,而不必直接操作SQL语句,从而更容易地进行数据库交互。

对象和关系型数据库的差异

  • 对象:在面向对象编程中,对象通常包含属性和方法,表示现实世界中的事物(例如:一个Person对象,包含姓名、年龄等属性)。
  • 关系型数据库:数据库中的数据通常存储在表格中,每个表格由多个行和列组成,行代表数据的记录,列代表属性。

ORM的基本工作原理

ORM通过映射机制将对象的字段和关系型数据库表的字段相对应,并将对象的操作转换为SQL语句的执行。通常,ORM会执行以下操作:

  • 增(Create):将一个对象插入到数据库表中。
  • 查(Read):根据条件查询数据库,返回对应的对象。
  • 改(Update):修改对象的属性,并更新数据库中对应的记录。
  • 删(Delete):删除对象,并从数据库中移除对应的记录。

ORM的映射关系

ORM将对象模型映射到数据库中的表结构,常见的映射关系有:

  • 一对一(One-to-One):一个对象对应一个数据库表中的一行。例如:每个用户对应一个账户。
  • 一对多(One-to-Many):一个对象对应多行数据库记录。例如:一个作者可以写多本书。
  • 多对多(Many-to-Many):多个对象之间可以有多重关系,通常需要一个中间表来进行关联。例如:学生与课程之间的关系。

常见的ORM框架

ORM框架为开发人员提供了简化数据库操作的工具,以下是一些流行的ORM框架:

  • Hibernate:Java生态系统中非常流行的ORM框架,支持复杂的映射和事务管理。
  • JPA(Java Persistence API):是Java EE标准中定义的ORM规范,常与Hibernate一起使用。
  • MyBatis:与Hibernate不同,MyBatis并不完全采用对象关系映射的方式,而是允许开发者编写SQL语句,使用映射文件来进行对象映射。
  • Entity Framework:.NET框架中的ORM工具,支持LINQ查询。
  • Django ORM:Python中Django框架的ORM,使用Python对象与数据库表进行映射。
  • SQLAlchemy:Python中最受欢迎的ORM框架,提供了丰富的数据库操作功能。

MyBatis 简介

MyBatis 是一款优秀的 基于 ORM 的半自动轻量级持久层框架,它支持定制化的 SQL、存储过程以及高级映射,MyBatis 避免了几乎所有 JDBC 代码和手动设置参数以及获取结果集。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库记录。

MyBatis 历史

原来是一个 Apache 的一个开源项目 iBatis,2010 年 6 月这个项目由 Apache Software Foundation 迁移到了 Google Code,随着开发团队转移到了 Google 下,iBatis3.x 正式修改为 MyBatis,代码于 2013 年 11 月迁移到了 GitHub。

iBatis 一词来源于"Internet abatis"的结合,是一个基于 Java 的持久层框架,iBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)。

起源与早期历史(2002年 - 2010年)

iBatis 项目的起源

MyBatis 最早源自一个名为 iBatis 的项目。iBatis 项目的起始可以追溯到 2002年,它由 Clinton Begin 和其他一些开发者发起,最初是作为一个轻量级的 JDBC 框架,用来简化 Java 程序与数据库之间的交互。

iBatis 的目标是提供一种简单的方式,将 SQL 查询与 Java 对象进行映射,减少繁琐的 JDBC 代码,并提供更加灵活的数据库操作方式。iBatis 采用了 XML 配置文件来描述 SQL 查询,并通过映射器(Mapper)将查询结果映射到 Java 对象。iBatis 成为许多 Java 开发者进行数据库操作的首选工具,特别是在那些需要使用原生 SQL 查询的场景中。

iBatis 1.x 和 2.x 的发展

在 2000 年代初,iBatis 逐渐发展成了一个相对成熟的框架,版本也逐步更新。iBatis 2.x 提供了更为灵活的 SQL 映射功能,并引入了新的特性,如动态 SQL 支持和更强大的查询功能。iBatis 2.x 可以说是对 SQL 语句的封装和映射做出了进一步的优化。

重命名与 MyBatis 的诞生(2010年)

iBatis 3.x 的推出与重命名

到了 2010年,iBatis 的开发者决定对项目进行一次大幅度的重构,并进行品牌重塑。iBatis 项目经历了数个版本后,开发团队认为框架的功能已经发展得非常成熟,但同时也面临着与其他类似工具的竞争(如 Hibernate 和 JPA)。因此,他们决定对 iBatis 进行一次全面的改进,并在这个过程中为其重新命名为 MyBatis。

MyBatis 的名字由"My"(代表开发者的自由和灵活)和"Batis"(代表 SQL 语句映射)组成,体现了框架对于灵活性和原生 SQL 支持的特点。

MyBatis 3.x 的发布

在 2010 年,MyBatis 3.x 发布,并带来了一些关键的新特性和改进:

  • 支持注解:MyBatis 3 引入了基于注解的配置方式,使得开发人员能够通过注解方式定义 SQL 映射,而不再完全依赖于 XML 配置文件。这使得 MyBatis 更加灵活和简洁。
  • 增强的动态 SQL 功能:MyBatis 提供了更加强大的动态 SQL 功能,允许开发者根据条件动态生成 SQL 语句。
  • 更好的插件支持:MyBatis 3.x 提供了更加开放的插件机制,允许开发者通过插件扩展 MyBatis 的功能。

MyBatis 的流行与成熟(2011年 - 现在)

快速流行

在 MyBatis 3.x 发布之后,由于它简化了 Java 与数据库的交互,同时允许开发人员编写原生 SQL,MyBatis 在 Java 开发者中迅速流行开来。相比于其他全自动 ORM 框架(如 Hibernate),MyBatis 提供了更多的控制权和灵活性,特别适用于那些复杂 SQL 查询或对性能要求较高的场景。

MyBatis 的易用性和灵活性使其在企业级应用、微服务架构以及大数据应用中得到了广泛应用。开发者可以在 MyBatis 中自由使用 SQL 查询,同时利用其强大的映射功能将结果映射到 Java 对象,从而实现高效的数据库操作。

MyBatis 和 Spring 结合

MyBatis 也与 Spring 框架紧密集成,成为 Spring 开发中常用的数据持久层框架之一。Spring 提供了对 MyBatis 的支持,使得 MyBatis 可以和 Spring 的事务管理、数据源管理等功能无缝集成。通过 SqlSessionFactoryBean 和 MapperScannerConfigurer 等工具,开发者可以在 Spring 环境下轻松配置和使用 MyBatis。

MyBatis 的社区支持

MyBatis 逐渐发展成一个开源项目,由 Apache 软件基金会管理。MyBatis 社区提供了大量的文档、教程和支持,帮助开发人员更好地理解和使用 MyBatis。此外,MyBatis 还得到了许多企业和开发者的支持,随着时间的推移,它已经成为 Java 开发中最受欢迎的数据库框架之一。

MyBatis 4.x 和未来(2015年 - 至今)

MyBatis 4.x 和持续改进

随着 Java 技术的不断发展,MyBatis 也持续更新迭代。虽然在名称上没有新的大版本发布,但 MyBatis 在性能优化、功能扩展和与现代开发框架的兼容性方面不断进行改进。例如:

  • 支持 Java 8:MyBatis 开始全面支持 Java 8 特性,如 Lambda 表达式和新的时间日期 API。
  • 更加灵活的映射:MyBatis 继续增强对复杂映射的支持,能够更方便地处理嵌套映射、联表查询等复杂场景。
  • 集成更多工具:MyBatis 与其他技术栈(如 Spring Boot)有了更好的集成,简化了配置和使用。

MyBatis Generator 和 MyBatis Plus

  • MyBatis Generator:是 MyBatis 官方提供的一款工具,可以根据数据库表自动生成 Java 对象及其映射文件,从而加速开发流程。
  • MyBatis Plus:是社区开发的一个增强版 MyBatis,提供了更多的便捷功能,如自动 CRUD 操作、分页查询等,减少了重复的代码编写。

MyBatis 优势

MyBatis 是一个半自动化的持久层框架,对开发人员来说,核心 SQL还是需要自己进行优化,SQL 和 Java 编码进行分离,功能边界清晰,一个专注业务,一个专注数据。

灵活性高,支持原生 SQL

MyBatis 允许开发者在映射文件中编写原生 SQL,而不像 ORM 框架那样完全封装 SQL 生成。这意味着开发人员可以在保持高度灵活性的同时,控制 SQL 查询的执行逻辑,适应复杂的查询需求。

对于复杂的联接查询、条件查询、分页查询等,MyBatis 提供了更多定制化的空间。对于性能要求较高的应用,开发者可以在 SQL 级别进行优化,避免 ORM 框架的查询抽象可能带来的性能瓶颈。

避免了 ORM 的性能开销

ORM 框架(如 Hibernate)通过对对象进行映射、缓存和管理,通常会引入一定的性能开销,尤其是在大规模数据查询时。而 MyBatis 提供了对 SQL 的手写控制,开发者可以更细粒度地优化查询,减少无效的查询和多余的数据加载。

MyBatis 支持 懒加载 和 缓存机制,但相比 ORM 框架,它的开销更小,可以更精细地控制数据的加载时机和缓存策略。

支持动态 SQL

MyBatis 提供了非常强大的动态 SQL 功能,能够根据条件动态地生成 SQL 语句。通过 、、、 等标签,可以在 XML 配置文件中灵活地构建 SQL,避免了代码中写大量的 if-else 逻辑。

动态 SQL 对于复杂的查询构造非常有用,尤其是需要根据用户输入条件来动态生成查询语句时。

简洁的映射机制

MyBatis 提供了简洁的映射方式,开发者只需通过 XML 或注解将 SQL 查询与 Java 方法绑定,无需使用复杂的映射类。它使用 ResultMap 来映射查询结果和 Java 对象,简单且直观。

如果你只需要基本的 CRUD 操作,并且对 SQL 有较高的控制要求,MyBatis 提供了简洁的方式来实现,无需强制使用对象模型或关系映射。

支持复杂的查询

MyBatis 能够轻松支持非常复杂的 SQL 查询,包括多表联接、子查询、嵌套查询等。对于一些需要特别高效的查询,MyBatis 提供了灵活的扩展机制,避免了 ORM 框架中复杂查询时的性能损失。

如果有特殊的数据库逻辑,MyBatis 允许开发者直接编写 SQL 语句,而不依赖框架生成 SQL,从而实现更精确的控制。

简化了数据库事务管理

MyBatis 提供了内建的事务管理支持,结合 Spring 等框架的事务管理,能够轻松实现对数据库事务的控制。开发者无需手动管理事务,MyBatis 和 Spring 结合使用时可以自动开启、提交和回滚事务,确保数据一致性和可靠性。

跨数据库支持

MyBatis 提供了广泛的数据库支持,能够与大多数关系型数据库兼容(如 MySQL、PostgreSQL、Oracle、SQL Server 等)。这对于需要迁移数据库的应用非常有帮助,因为 MyBatis 使得 SQL 查询与数据库种类解耦。

你可以在同一个项目中使用不同的数据库,只要修改数据库连接配置和 SQL 语句即可,MyBatis 提供了更灵活的迁移路径。

相关推荐
谢家小布柔2 分钟前
Java 中的字符串
java·开发语言
码老白2 分钟前
【老白学 Java】HashSet 应用 - 卡拉 OK(五)
java·开发语言
i7i8i9com3 分钟前
java 1.8+springboot文件上传+vue3+ts+antdv
java·spring boot·后端
秋意钟4 分钟前
Spring框架处理时间类型格式
java·后端·spring
寻找沙漠的人9 分钟前
理解JVM
java·jvm·java-ee
我叫啥都行14 分钟前
计算机基础复习12.22
java·jvm·redis·后端·mysql
寻找沙漠的人21 分钟前
JavaEE 导读与环境配置
java·spring boot·java-ee
Zmxcl-00730 分钟前
IIS解析漏洞
服务器·数据库·microsoft
taoyong00131 分钟前
Java线程核心01-中断线程的理论原理
java·开发语言
Yhame.1 小时前
Java 集合框架中的 List、ArrayList 和 泛型 实例
java