跳到正文

ORM

Object-Relational Mapping

中级通用

ORM(对象关系映射)是一种让程序用对象或模型读写关系型数据库表的方式。它帮你把常见的数据操作写成应用代码,并处理对象与表、字段之间的转换;比如通过订单模型查找用户的订单。

你可能会说:「我想在网站后端用代码里的用户和订单模型读写数据库,少手写重复的查询。」

读之前建议先了解

动手看看

模型查询订单页后端查询用户订单ORM接收模型操作订单表订单对象列表
1

用户打开订单页,后端通过订单模型,指定按当前用户的 userId 查订单,不必自己拼接 SQL。

要点

  1. 1

    模型对应表和字段

    我们在代码里定义用户模型,把它关联到用户表,并说明属性对应哪些字段。这样你操作模型时,ORM 才知道数据该从哪里读、往哪里写。

  2. 2

    模型操作会变成查询

    你调用模型的查找或保存方法,ORM 会据此生成并执行数据库查询,再把结果转换成代码里的对象。它省去了不少重复转换工作,但数据库仍在执行查询。

  3. 3

    关联读取也有查询成本

    比如后台要展示订单及其用户,模型关联能让代码更好写。但如果逐条订单读取用户,可能产生大量查询;我们还得检查实际发出的查询,必要时批量加载。

容易混淆的地方

ORM 不是数据库,也不是 SQL 的替代品:数据仍存放在数据库里,ORM 最终仍要执行查询。你可以用 SQL 精细控制复杂查询,或通过 ORM 执行原生 SQL。ORM 也不同于数据库迁移:迁移负责改变表结构,ORM 主要负责在程序运行时读写数据。

什么时候用

适合用

  • 做电商后台的订单增删改查时,用模型组织字段和关联,减少重复的数据转换代码。
  • 做有用户、文章、评论的内容网站时,用 ORM 表达这些数据之间的关系并完成常见查询。
  • 团队用关系型数据库开发业务功能时,让代码中的数据模型有统一的读写入口。

不适合用

  • 只是做不保存数据的静态展示页,没有数据库读写,就不需要引入 ORM。
  • 主要在做跨多张大表的统计报表,查询需要精细调优时,可以直接编写并检查 SQL。
  • 文件和图片存放在对象存储中时,用对象存储的接口处理文件;ORM 只可能用于管理其元数据。

练一练

你在做订单后台,页面要列出订单号和下单用户姓名。AI 已用 ORM 写出代码,但页面加载时发出了大量数据库查询。接下来怎么处理更合适?

让 AI 帮你做

请为订单后台使用项目现有的 ORM 定义订单与用户的模型关联,实现订单列表查询,返回订单号和用户名。先查看现有表结构与模型约定,并检查生成的查询是否会逐条读取用户;说明你的处理方式和验证结果。

接下来学什么