Skip to content

ORM(对象关系映射)

一句话

用写代码的方式操作数据库,不用手写 SQL。 user.save() 代替 INSERT INTO users ...

核心直觉

js
// 不用 ORM:手写 SQL 字符串
await db.query('SELECT * FROM users WHERE email = ?', [email]);

// 用 ORM(Prisma):
const user = await prisma.user.findUnique({ where: { email } });

ORM 把数据库的表映射成编程语言的对象(类/接口),把 SQL 操作映射成对象方法——这就是 Object-Relational Mapping。

常见 ORM

ORM语言风格适合
PrismaTS/JSSchema-first类型安全优先,全栈项目首选
DrizzleTS/JSSQL-like接近原生 SQL,喜欢手写查询
TypeORMTS/JSDecoratorNestJS 生态,装饰器风格
SequelizeTS/JSModel-based老牌 ORM,生态成熟

优缺点

优点: 类型安全(TypeScript 下编译时就能发现字段拼错),自动迁移(改 Schema 自动同步表结构),防止 SQL 注入 缺点: 复杂查询不如手写 SQL 灵活,多一层抽象(出问题要查「为什么生成这样的 SQL」),N+1 查询陷阱

小结

ORM 是「用对象的思维操作数据库」——前端熟悉的对象语法替代 SELECT/INSERT。Prisma 是目前 TypeScript 全栈项目的主流选择,但它不替代你对 SQL 的理解——复杂查询时你依然需要知道背后生成了什么 SQL。

下一步