返回知识库工程与栈 · Web 技术
对象关系映射ORM
ORM 把对象方法翻译成参数化 SQL,再把结果行映射回对象。列名由模型对齐,少手写拼错。
先认出同一首歌的两面,再决定谁来对列名
下面就是 Song 对象和 songs 行:默认已经对齐。手写错列名,undefined 也写在同一对物件上。
对象对齐表行:映射长在这一对物件上。
原因:findUnique 被翻译成参数化 SQL,行映射成 Song。下一步:点「手写错列名」,看对象会不会变成 undefined。
知识点:对象方法翻译成 SQL
两边的歌名已经演示了映射,这里只命名四条。
- 你写对象方法,框架翻译成可核对的参数化 SQL。
- 结果行再映射成嵌套对象,关系用 include 一次取齐。
- 列名由模型提供,少手写拼写,少注入。
- 离开后要盯:复杂报表仍可退回 SQL,但用户输入必须参数化。
什么时候用、怎么用
按对象读写关系数据时用 ORM;要精确控制执行计划时直接写 SQL。
- 信号:User/Order 这类对象关系、列表要带上子项。
- 适用:find / include / 迁移可回放。
- 不适用:随手拼接字符串当查询——那既不是 ORM 也不是安全 SQL。
- 最短路径:建模型 → 用对象方法取 → 核对生成的 SQL。
正反例:同一首歌
目标都是取出夜曲,只改列名谁说了算。
两边都是夜曲。结果长在物件上。
反例手写 SQL 把 title 拼成 titel对象变成 undefined。失败写在两边。
快速自测
ORM 最关键的工作是什么?
继续查证
术语的技术定义和行为以这些一手或权威资料为准。