用于 NestJS 的下一代 & 完全类型安全的 ORM

在 NestJS 应用中使用 Prisma 查询来自 MySQL、PostgreSQL & SQL Server 数据库的数据 – 适用于 JavaScript 和 TypeScript 的更佳 ORM。

tech

什么是 Prisma?

Prisma 使数据处理变得轻松!它提供类型安全的 Node.js & TypeScript ORM、全局数据库缓存、连接池和实时数据库事件。

查询
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
表格
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

Prisma 和 NestJS 如何协同工作

Prisma ORM 是一种下一代 ORM,可用于在 NestJS 应用中查询数据库。它采用 TypeScript 以避免运行时错误并提高生产力。它提供的类型安全远远超出 TypeORM 或 Sequelize 等传统 ORM 的保证 (了解更多)。
Prisma 与 NestJS 的模块化架构平滑集成,无论您构建的是 REST 还是 GraphQL API。

您还可以使用我们的其他工具来增强 Prisma ORM 的使用
Prisma Accelerate 是一个全局数据库缓存和可扩展的连接池,可加速您的数据库查询。
Prisma Pulse 使您能够以类型安全的方式构建反应式实时应用程序。

Prisma 和 NestJS 代码示例

结合 NestJS 和 Prisma 提供了一种新的类型安全级别,这是 Node.js & TypeScript 生态系统中任何其他 ORM 都无法实现的。此示例演示了如何使用 Prisma Client

通过实现一个 UserService 类,遵循 NestJS 的模块化架构并通过依赖注入,该类将为您的应用程序控制器提供 CRUD 或特定于域的操作。

PrismaService

PrismaService

可以通过扩展生成的 PrismaClient 来实现 PrismaService 类,以便构建 Prisma Client 的抽象,该抽象与您的 NestJS 架构集成。它将通过依赖注入提供给其他服务和控制器。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}
AppController
Prisma schema

PrismaService

可以通过扩展生成的 PrismaClient 来实现 PrismaService 类,以便构建 Prisma Client 的抽象,该抽象与您的 NestJS 架构集成。它将通过依赖注入提供给其他服务和控制器。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}

为什么选择 Prisma 和 NestJS?

拥抱 TypeScript

Prisma 是第一个提供完全类型安全的 ORM,即使在查询部分模型和关系时也是如此。

平滑集成

Prisma 完美契合 NestJS 的模块化架构,并提供强大的数据库访问层。

类型安全的数据库客户端

Prisma Client 确保完全类型安全的数据库查询,并具有自动完成等优点 - 即使在 JavaScript 中也是如此。

直观的数据建模

Prisma 的声明式建模语言简单易懂,可让您直观地描述数据库模式。

轻松的数据库迁移

从声明式 Prisma 模式生成可预测和可自定义的 SQL 迁移。

专为构建 API 而设计

Prisma Client 通过为常见的 API 功能(例如分页、过滤器等)提供查询来减少样板代码。

精选的 Prisma & NestJS 社区示例

包含 NestJS & Prisma 的生产就绪启动套件

一个启动套件,涵盖了在生产环境中用 NestJS 和 Prisma 构建所需的一切。

NestJS 文档中的 Prisma

了解如何在官方 NestJS 文档中使用 Prisma 和 NestJS。

使用 NestJS 和 Prisma 构建 REST API

一个关于使用 NestJS REST API 和 Prisma 构建的综合研讨会和系列。

将大型生产应用从 TypeORM 迁移到 Prisma

一篇关于将 NestJS 应用从 TypeORM 迁移到 Prisma 的迁移过程的深入文章。