返回知识库

工程与栈 · Web 技术

对象关系映射ORM

ORM 把对象方法翻译成参数化 SQL,再把结果行映射回对象。列名由模型对齐,少手写拼错。

先认出同一首歌的两面,再决定谁来对列名

下面就是 Song 对象和 songs 行:默认已经对齐。手写错列名,undefined 也写在同一对物件上。

夜校点歌柜 · 映射对象对齐表行
Song 对象夜曲

song.title

songs 表行title = 夜曲

id = 7

对象对齐表行映射长在这一对物件上。

原因:findUnique 被翻译成参数化 SQL,行映射成 Song。下一步:点「手写错列名」,看对象会不会变成 undefined。

知识点:对象方法翻译成 SQL

两边的歌名已经演示了映射,这里只命名四条。

  • 你写对象方法,框架翻译成可核对的参数化 SQL。
  • 结果行再映射成嵌套对象,关系用 include 一次取齐。
  • 列名由模型提供,少手写拼写,少注入。
  • 离开后要盯:复杂报表仍可退回 SQL,但用户输入必须参数化。

什么时候用、怎么用

按对象读写关系数据时用 ORM;要精确控制执行计划时直接写 SQL。

  • 信号:User/Order 这类对象关系、列表要带上子项。
  • 适用:find / include / 迁移可回放。
  • 不适用:随手拼接字符串当查询——那既不是 ORM 也不是安全 SQL。
  • 最短路径:建模型 → 用对象方法取 → 核对生成的 SQL。

正反例:同一首歌

目标都是取出夜曲,只改列名谁说了算。

正例用对象方法取 title

两边都是夜曲。结果长在物件上。

反例手写 SQL 把 title 拼成 titel

对象变成 undefined。失败写在两边。

快速自测

ORM 最关键的工作是什么?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。