对象/关系映射 ORM
ORM 全称 Object/Relation Mapping:表示对象-关系映射的缩写。ORM 完成面向对象的编程语言 DAO 关系数据库的映射,当 ORM 框架完成映射后,程序员既可以利用面向对象程序设计语言的简易易用性,又可以利用关系数据库的技术优势。
ORM 把关系数据库包装成面向对象的模型,ORM 框架是面向对象设计语言与关系数据库发展不同步的中间解决方案。
对象和关系型数据库的差异
- 对象: 在面向对象编程中,对象通常包含属性和方法,表示现实世界中的事物
- 关系型数据库: 数据库中的数据存储在表格中,行代表数据的记录,列代表属性
ORM的基本工作原理
ORM通过映射机制将对象的字段和关系型数据库表的字段相对应,并将对象的操作转换为SQL语句的执行。通常,ORM会执行以下操作:
- 增(Create): 将一个对象插入到数据库表中
- 查(Read): 根据条件查询数据库,返回对应的对象
- 改(Update): 修改对象的属性,并更新数据库中对应的记录
- 删(Delete): 删除对象,并从数据库中移除对应的记录
ORM的映射关系
- 一对一(One-to-One): 一个对象对应一个数据库表中的一行
- 一对多(One-to-Many): 一个对象对应多行数据库记录
- 多对多(Many-to-Many): 多个对象之间可以有多重关系,通常需要中间表
常见的ORM框架
- Hibernate:Java生态系统中非常流行的ORM框架
- JPA(Java Persistence API):Java EE标准中定义的ORM规范
- MyBatis:半自动轻量级持久层框架,允许开发者编写SQL语句
- Entity Framework:.NET框架中的ORM工具
- Django ORM:Python中Django框架的ORM
- SQLAlchemy:Python中最受欢迎的ORM框架
MyBatis 简介
MyBatis 是一款优秀的基于 ORM 的半自动轻量级持久层框架,它支持定制化的 SQL、存储过程以及高级映射,MyBatis 避免了几乎所有 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库记录。
MyBatis 历史
起源与早期历史(2002年 - 2010年)
MyBatis 最早源自一个名为 iBatis 的项目。iBatis 项目的起始可以追溯到2002年,它由 Clinton Begin 和其他一些开发者发起,最初是作为一个轻量级的 JDBC 框架,用来简化 Java 程序与数据库之间的交互。
iBatis 的目标是提供一种简单的方式,将 SQL 查询与 Java 对象进行映射,减少繁琐的 JDBC 代码,并提供更加灵活的数据库操作方式。
重命名与 MyBatis 的诞生(2010年)
到了2010年,iBatis 的开发者决定对项目进行一次大幅度的重构,并进行品牌重塑。iBatis 项目经历了数个版本后,开发团队认为框架的功能已经发展得非常成熟,因此决定对其重新命名为 MyBatis。
MyBatis 的名字由”My”(代表开发者的自由和灵活)和”Batis”(代表 SQL 语句映射)组成。
MyBatis 3.x 的发布
- 支持注解:引入了基于注解的配置方式
- 增强的动态SQL功能
- 更好的插件支持
MyBatis 的流行与成熟(2011年 - 现在)
在 MyBatis 3.x 发布之后,由于它简化了 Java 与数据库的交互,同时允许开发人员编写原生 SQL,MyBatis 在 Java 开发者中迅速流行开来。
MyBatis 4.x 和未来(2015年 - 至今)
- 支持 Java 8:MyBatis 开始全面支持 Java 8 特性
- 更加灵活的映射:继续增强对复杂映射的支持
- MyBatis Generator:官方提供的代码生成工具
- MyBatis Plus:社区开发的增强版,提供自动 CRUD 操作、分页查询等
MyBatis 优势
灵活性高,支持原生 SQL
MyBatis 允许开发者在映射文件中编写原生 SQL,而不像 ORM 框架那样完全封装 SQL 生成。这意味着开发人员可以在保持高度灵活性的同时,控制 SQL 查询的执行逻辑。
避免了 ORM 的性能开销
ORM 框架(如 Hibernate)通常会引入一定的性能开销。MyBatis 提供了对 SQL 的手写控制,开发者可以更细粒度地优化查询。
支持动态 SQL
MyBatis 提供了非常强大的动态 SQL 功能,能够根据条件动态地生成 SQL 语句。通过 <if>、<where>、<foreach>、<set> 等标签,可以在 XML 配置文件中灵活地构建 SQL。
简洁的映射机制
MyBatis 提供了简洁的映射方式,开发者只需通过 XML 或注解将 SQL 查询与 Java 方法绑定。
支持复杂的查询
MyBatis 能够轻松支持非常复杂的 SQL 查询,包括多表联接、子查询、嵌套查询等。
简化了数据库事务管理
MyBatis 提供了内建的事务管理支持,结合 Spring 等框架的事务管理,能够轻松实现对数据库事务的控制。
跨数据库支持
MyBatis 提供了广泛的数据库支持,能够与大多数关系型数据库兼容(如 MySQL、PostgreSQL、Oracle、SQL Server 等)。