1. 什么是ORM?

对象关系映射(Object Relational Mapping,简称ORM)是一种框架技术,用于解决面向对象编程语言与关系数据库之间存在的互不匹配的现象。

ORM框架是连接应用程序和数据库的桥梁,它提供了持久化类与数据库表之间的映射关系。在运行时,ORM框架能够参照映射配置,将对象持久化到数据库中,或者将数据库记录映射为应用程序中的对象。

ORM框架:为了解决面向对象编程与关系数据库之间的不匹配而设计的框架技术。这是一种通用的技术方案,不专属于任何特定的编程语言。

主流ORM框架示例:

不同编程语言都有各自的主流ORM框架:

Java生态:

  • Hibernate - 全自动ORM框架,需要写HQL语句
  • MyBatis - 半自动持久层框架,轻量级
  • JPA (Java Persistence API) - Java持久化标准规范
  • EclipseLink - 全功能ORM框架

C#/.NET生态:

  • Entity Framework (EF) - 微软官方ORM框架
  • Dapper - 轻量级ORM,高性能
  • NHibernate - .NET版的Hibernate

Python生态:

  • SQLAlchemy - Python最流行的ORM框架
  • Django ORM - Django框架内置的ORM
  • Peewee - 轻量级ORM框架

JavaScript/TypeScript生态:

  • Sequelize - Node.js ORM框架
  • TypeORM - TypeScript ORM框架
  • Prisma - 现代ORM工具

2. 为什么使用ORM?

当我们实现一个应用程序时(不使用O/R Mapping),我们可能会写特别多数据访问层的代码,从数据库保存、删除、读取对象信息,而这些代码都是重复的。而使用ORM则会大大减少重复性代码。

对象关系映射(Object Relational Mapping,简称ORM),主要实现程序对象到关系数据库数据的映射。

3. 对象-关系映射解释:

3.1 简单

ORM以最基本的形式建模数据。ORM框架会将数据库中的表映射成编程语言中的类(模型),表的字段对应类的属性或成员变量。例如:一张用户表可以映射为一个User类,表中的字段如id、name、email对应类的属性。

3.2 精确

ORM使所有的数据表都按照统一的标准精确地映射成编程语言中的类,使系统在代码层面保持准确统一。无论使用MySQL、PostgreSQL还是SQL Server,都可以通过ORM框架统一操作。

3.3 易懂

ORM使数据库结构文档化。数据库的结构被ORM转换为了程序员可以读懂的编程语言类,程序员可以专注于业务逻辑层面的开发,而无需过多关注底层SQL细节(当然能够熟练掌握SQL会更有帮助)。

3.4 易用

ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), findAll(), where()等,将SQL查询封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。

4. ORM的优缺点:

优点:

  1. 提高开发效率,降低开发成本
    减少重复的数据访问代码,快速完成数据库操作。

  2. 使开发更加对象化
    使用面向对象的方式操作数据库,更符合面向对象编程思想。

  3. 可移植
    更换数据库时只需修改配置,无需改动业务代码。

  4. 可以很方便地引入数据缓存之类的附加功能
    ORM框架通常提供了缓存机制,提升查询性能。

缺点:

  1. 自动化进行关系数据库的映射需要消耗系统性能
    其实这里的性能消耗还好啦,一般来说都可以忽略之。

  2. 在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂
    复杂的SQL查询可能需要使用原生SQL或者复杂的ORM查询语法。

总结

ORM是一种通用的框架技术,不专属于任何特定的编程语言。无论是Java、C#、Python、JavaScript等编程语言,都有相应的ORM框架实现。ORM框架是现代软件开发中不可或缺的工具,它简化了数据访问层的开发,提高了代码的可维护性和可移植性。选择合适的ORM框架能够显著提升开发效率和代码质量。