TypeScript ORM:TypeORM、Prisma 和 MikroORM 对比

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

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

开始课程

TypeScript ORM:对比与示例



在现代 TypeScript 网页开发中,选择合适的 ORM(对象关系映射)是一个关键决策,它会影响项目的架构、性能和可维护性。ORM 允许你通过编程语言的对象来操作数据库,从而抽象 SQL 查询。本文将介绍三种最流行的 TypeScript ORM:TypeORM、Prisma 和 MikroORM。你将了解它们的优缺点,并看到每种 ORM 的代码示例。



1. TypeORM



TypeORM 是 TypeScript 和 JavaScript 中最古老、最成熟的 ORM 之一。它支持 Active Record 和 Data Mapper 模式,以及多种数据库:PostgreSQL、MySQL、SQLite、MongoDB 等。



TypeORM 特点:

  • 支持使用装饰器定义实体
  • 灵活的关系:OneToOne、OneToMany、ManyToMany
  • 迁移和模式同步
  • 支持订阅和生命周期事件
  • 用于复杂查询的 Query Builder


TypeORM 代码示例:

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, createConnection } from "typeorm";

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

@Column() name: string;

@Column() email: string;}

async function main() { await createConnection({ type: "postgres", host: "localhost", port: 5432, username: "test", password: "test", database: "test", entities: [User], synchronize: true, });

const user = new User(); user.name = "伊万"; user.email = "ivan@example.com"; await user.save();

const users = await User.find(); console.log(users);}


优点:社区庞大,教程众多,支持 MongoDB。缺点:配置复杂,lazy loading 存在问题,API 有时不够直观。



2. Prisma



Prisma 是一种现代 ORM,它重新定义了与数据库交互的方式。它不采用传统 ORM,而是提供三个组件:Prisma Client(自动生成的类型安全客户端)、Prisma Migrate(迁移系统)和 Prisma Studio(图形界面)。



Prisma 特点:

  • 声明式数据模式(schema.prisma)
  • 基于模式的完全类型化——无需手动定义类型
  • 自动生成客户端
  • 支持事务和分页
  • 与 GraphQL 集成(Nexus、TypeGraphQL)


Prisma 代码示例:

// schema.prismamodel User {  id    Int     @id @default(autoincrement())  name  String  email String  @unique  posts Post[]}

model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}

// main.tsimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() { const user = await prisma.user.create({ data: { name: '玛丽亚', email: 'maria@example.com', posts: { create: { title: '我的第一篇文章' } } }, include: { posts: true } });

const users = await prisma.user.findMany({ include: { posts: true } }); console.log(users);}

main() .catch(e => console.error(e)) .finally(() => prisma.$disconnect());


优点:同类最佳的类型化,语法简单,文档优秀。缺点:依赖模式,自定义查询复杂,内存消耗较大。



3. MikroORM



MikroORM 是一种微型 ORM,灵感来源于 Doctrine

推荐