JavaScript (Node.js) 的 ORM:Sequelize、TypeORM、Prisma 对比

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript (Node.js) 的 ORM:对比与示例



在 Node.js 后端开发中,迟早会遇到与数据库交互的问题。编写纯 SQL 查询既耗时又容易出错。这时,ORM(对象关系映射)库就派上了用场,它允许您像操作普通 JavaScript 对象一样操作数据库表。本文将对比三种最流行的 Node.js ORM:Sequelize、TypeORM 和 Prisma,并提供清晰的代码示例。



1. Sequelize

Sequelize 是 Node.js 中最古老、最成熟的 ORM 之一。它支持 PostgreSQL、MySQL、MariaDB、SQLite 和 Microsoft SQL Server。Sequelize 采用经典的模型和 Promise(或 async/await)方法。



安装

npm install sequelize pg pg-hstore


示例:定义模型和查询

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('database', 'user', 'password', {  host: 'localhost',  dialect: 'postgres'});

const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

async function createUser() { await sequelize.sync(); const user = await User.create({ name: '伊万', email: 'ivan@example.com' }); console.log(user.toJSON());}createUser();


Sequelize 特性

  • 成熟稳定,社区庞大。
  • 支持事务、迁移和数据填充。
  • 灵活的关联系统(hasOne、hasMany、belongsToMany)。
  • 缺点:部分语法冗长,调试较复杂。


2. TypeORM

TypeORM 是一个既支持 JavaScript 也支持 TypeScript 的 ORM。它支持与 Sequelize 相同的数据库,并提供两种方法:Active Record 和 Data Mapper。TypeORM 还大量使用装饰器,使代码更具声明性。



安装

npm install typeorm reflect-metadata pg


示例:使用装饰器的模型和查询

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()class User { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column({ unique: true }) email: string;}

async function createUser() { const connection = await createConnection({ type: 'postgres', host: 'localhost', database: 'test', entities: [User], synchronize: true }); const user = new User(); user.name = '玛丽亚'; user.email = 'maria@example.com'; await connection.manager.save(user); console.log(user);}createUser();


TypeORM 特性

  • 与 TypeScript 和装饰器完美集成。
  • 灵活性:可在 Active Record 和 Data Mapper 之间选择。
  • 支持迁移、事件订阅和日志记录。
  • 缺点:文档有时不完整,常有破坏性变更。


3. Prisma

Prisma 是一个现代 ORM,与前辈们有根本不同。您不是在代码中定义模型,而是在一个专门的 schema.prisma 文件中描述数据模式,然后 Prisma 会生成类型安全的客户端。这提供了 IDE 中的自动补全功能,并最大限度地减少了错误。



安装

npm install @prisma/clientnpx prisma init


示例:模式定义和查询

schema.prisma:

datasource db {  provider = "postgresql"  url      = env("DATABASE_URL")}

model User { id Int @id @default(autoincrement()) name String email String @unique}


JavaScript 代码:

const { PrismaClie                    

推荐