TypeScript ORM:Prisma、TypeORM 和 Drizzle 对比——代码示例

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

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

开始课程

TypeScript ORM:对比与示例



在当今的 TypeScript Web 开发中,选择合适的 ORM(对象关系映射)可以显著加快开发速度并提高应用程序的可靠性。ORM 允许通过面向对象的方式操作数据库,避免编写原始 SQL 查询。在本文中,我们将比较三种最流行的 TypeScript ORM:Prisma、TypeORM 和 Drizzle,并展示它们的使用示例。



1. Prisma——现代标准



Prisma 是新一代 ORM,专注于开发人员体验和性能。它使用自己的模式描述语言(Prisma Schema)并生成完全类型化的客户端。



主要特性:

  • 自动生成 TypeScript 类型
  • 直观的查询 API
  • 内置数据迁移(Prisma Migrate)
  • 支持 PostgreSQL、MySQL、SQLite、MongoDB 等


TypeScript 代码示例:

// 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])}

// 在代码中使用import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUsersWithPosts() { const users = await prisma.user.findMany({ include: { posts: true } }); return users;}


2. TypeORM——TypeScript 的经典选择



TypeORM 是一个成熟的 ORM,同时支持 Active Record 和 Data Mapper 模式。它与 TypeScript 紧密集成,并使用装饰器来定义模型。



主要特性:

  • 支持装饰器和类
  • 两种方法:Active Record 和 Data Mapper
  • 高级迁移和事件订阅
  • 支持多种数据库


TypeScript 代码示例:

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

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

@Column() name: string;

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

@OneToMany(() => Post, post => post.user) posts: Post[];}

@Entity()export class Post { @PrimaryGeneratedColumn() id: number;

@Column() title: string;

@Column({ nullable: true }) content: string;

@ManyToOne(() => User, user => user.posts) user: User;}

// 使用async function getUsersWithPosts() { const connection = await createConnection(); const userRepository = connection.getRepository(User); return await userRepository.find({ relations: ["posts"] });}


3. Drizzle——轻量且高性能



Drizzle 是一个相对较新的 ORM,注重性能和最小的打包体积。它使用类似 SQL 的语法,无需代码生成。



主要特性:

  • 体积小,速度快
  • 原生支持 TypeScript,无需装饰器
  • 类似 SQL 的 API(查询构建器)
  • 兼容 SQL 数据库


TypeScript 代码示例:

import { drizzle } from 'drizzle-orm/better-sqlite3';import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';import Database from 'better-sqlite3';

const sqlite = new Database('test.db');const db = drizzle(sqlite);

// 定义模式const users = sqliteTable('users', { id: integer('id').primaryKey(), name: text('na

推荐