ORM
Object-Relational Mapping
中级通用ORM(对象关系映射)是一种让程序用对象或模型读写关系型数据库表的方式。它帮你把常见的数据操作写成应用代码,并处理对象与表、字段之间的转换;比如通过订单模型查找用户的订单。
你可能会说:「我想在网站后端用代码里的用户和订单模型读写数据库,少手写重复的查询。」
动手看看订单页如何查出用户订单
1
用户打开订单页,后端通过订单模型,指定按当前用户的 userId 查订单,不必自己拼接 SQL。
要点ORM 怎样把代码和数据库接起来?
- 1
模型对应表和字段
我们在代码里定义用户模型,把它关联到用户表,并说明属性对应哪些字段。这样你操作模型时,ORM 才知道数据该从哪里读、往哪里写。
- 2
模型操作会变成查询
你调用模型的查找或保存方法,ORM 会据此生成并执行数据库查询,再把结果转换成代码里的对象。它省去了不少重复转换工作,但数据库仍在执行查询。
- 3
关联读取也有查询成本
比如后台要展示订单及其用户,模型关联能让代码更好写。但如果逐条订单读取用户,可能产生大量查询;我们还得检查实际发出的查询,必要时批量加载。
容易混淆的地方
ORM 不是数据库,也不是 SQL 的替代品:数据仍存放在数据库里,ORM 最终仍要执行查询。你可以用 SQL 精细控制复杂查询,或通过 ORM 执行原生 SQL。ORM 也不同于数据库迁移:迁移负责改变表结构,ORM 主要负责在程序运行时读写数据。
什么时候用
适合用
- 做电商后台的订单增删改查时,用模型组织字段和关联,减少重复的数据转换代码。
- 做有用户、文章、评论的内容网站时,用 ORM 表达这些数据之间的关系并完成常见查询。
- 团队用关系型数据库开发业务功能时,让代码中的数据模型有统一的读写入口。
不适合用
- 只是做不保存数据的静态展示页,没有数据库读写,就不需要引入 ORM。
- 主要在做跨多张大表的统计报表,查询需要精细调优时,可以直接编写并检查 SQL。
- 文件和图片存放在对象存储中时,用对象存储的接口处理文件;ORM 只可能用于管理其元数据。
练一练选一个答案,看看解释
你在做订单后台,页面要列出订单号和下单用户姓名。AI 已用 ORM 写出代码,但页面加载时发出了大量数据库查询。接下来怎么处理更合适?
让 AI 帮你做复制给 AI Agent 直接用
请为订单后台使用项目现有的 ORM 定义订单与用户的模型关联,实现订单列表查询,返回订单号和用户名。先查看现有表结构与模型约定,并检查生成的查询是否会逐条读取用户;说明你的处理方式和验证结果。