TypeScript ORM
为您的数据库提供零成本类型安全

使用 Prisma(一个适用于 Node.js 的类型安全的 TypeScript ORM)查询 MySQL、PostgreSQL 和 SQL Server 数据库中的数据

tech

什么是 Prisma?

Prisma 提供数据库工具,是构建高性能 Next.js 应用并获得卓越开发体验的完美伴侣。

ORM

Prisma ORM 是最受欢迎的 TypeScript ORM。它具有人类可读的模式、自动化迁移和一个直观、完全类型安全的查询 API。

了解更多关于 Prisma ORM 的信息

Postgres

Prisma Postgres 是第一个无冷启动的无服务器数据库。它基于unikernels,裸机运行,并内置缓存、高性能查询和无缝扩展——所有这些都带来了卓越的开发体验。

了解更多关于 Prisma Postgres 的信息

Prisma 和 TypeScript 如何协同工作

TypeScript 是一种基于 JavaScript 构建的静态类型语言。它提供 JavaScript 的所有功能,并额外增加了代码类型化和验证的能力,通过在运行代码之前捕获错误和提供修复来节省您的时间。所有有效的 JavaScript 代码也都是 TypeScript 代码,这使得 TypeScript 易于您采用。

Prisma 是一个适用于 Node.js 和 TypeScript 的 ORM,通过从您的数据库 schema 自动生成类型,提供零成本的类型安全优势。 它非常适合构建可靠的数据密集型应用程序。Prisma 让您在关系型数据库中存储数据时更有信心、更高效。您可以将其与任何 Node.js 服务器框架一起使用来与数据库交互。

Prisma Schema

从 Prisma schema 生成的类型确保您的所有数据库查询都是类型安全的。Prisma schema 使用 Prisma 的建模语言来定义您的数据库 schema,并生成相应的 TypeScript 类型。它使数据建模变得简单直观,尤其是在建模关系方面。

1// Define the `User` table in the database
2model User {
3 id String @id @default(cuid())
4 email String @unique
5 password String
6 name String?
7 posts Post[]
8}
9
10// Define the `Post` table in the database
11model Post {
12 id String @id @default(cuid())
13 createdAt DateTime @default(now())
14 title String
15 content String?
16 authorId String
17 author User @relation(fields: [authorId], references: [id])
18}

从 Prisma schema 生成的类型确保您的所有数据库查询都是类型安全的。Prisma Client 提供出色的自动补全体验,让您可以快速开发并确保不会编写无效查询。

1type User = {
2 id: string
3 email: string
4 password: string
5 name: string | null
6}
7
8export type Post = {
9 id: string
10 createdAt: Date
11 title: string
12 content: string | null
13 authorId: string
14}

Prisma 和 TypeScript 代码示例

只需定义一次您的 schema,Prisma 就会为您生成 TypeScript 类型。无需在数据库 schema 类型和应用程序代码之间手动同步。

以下代码演示了 Prisma 如何实现完全类型安全的数据库查询——适用于所有查询,包括部分查询和关系。

类型安全的数据库查询

零成本类型安全

Prisma Client 的查询始终推断其返回类型,从而更容易理解返回的数据——即使在获取关系时也是如此。

1// Inferred type:
2// User & {
3// posts: Post[];
4// }
5const user = await prisma.user.create({
6 data: {
7 email: 'alice@prisma.io',
8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',
9 name: 'Alice',
10 posts: {
11 create: {
12 title: 'Learn how to use Prisma with TypeScript',
13 content: 'https://prisma.org.cn/docs/',
14 },
15 },
16 },
17 include: {
18 posts: true,
19 },
20})
生成类型

零成本类型安全

Prisma Client 的查询始终推断其返回类型,从而更容易理解返回的数据——即使在获取关系时也是如此。

1// Inferred type:
2// User & {
3// posts: Post[];
4// }
5const user = await prisma.user.create({
6 data: {
7 email: 'alice@prisma.io',
8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',
9 name: 'Alice',
10 posts: {
11 create: {
12 title: 'Learn how to use Prisma with TypeScript',
13 content: 'https://prisma.org.cn/docs/',
14 },
15 },
16 },
17 include: {
18 posts: true,
19 },
20})

为什么选择 Prisma 和 TypeScript?

类型安全的数据库客户端

Prisma Client 确保完全类型安全的数据库查询,让您绝不会编写无效查询

优化的数据库查询

Prisma 内置的数据加载器确保优化的、高性能的数据库查询,即使是 N+1 查询也不例外。

自动补全

Prisma 在您编写查询时提供丰富的自动补全功能,助您编写查询

类型推断

Prisma Client 的查询始终推断其返回类型,从而更容易理解您的数据。

轻松的数据库迁移

将您的 Prisma schema 映射到数据库,这样您就不需要编写 SQL 来管理您的数据库 schema。

筛选、分页和排序

Prisma Client 通过提供常用数据库功能的便捷 API 来减少样板代码。

index.tsx
1const users = await prisma.user.findMany({
2 where: {
3 email: {
4 endsWith: '@prisma.io',
5 }
6 },
7 include: {
8 p
9 }
10})
 
postsPost[]

我们 ❤️ TypeScript

在 Prisma,我们热爱 TypeScript 并坚信其美好的未来。自 Prisma 诞生以来,我们一直将 TypeScript 编译器推向极限 以提供前所未有的类型安全数据库访问和丰富的自动补全功能,带来愉悦的开发体验。

Prisma 的核心是类型安全,让您少犯错误。通过利用 TypeScript 的结构化类型系统,Prisma 将数据库查询映射到 结构化类型 因此您可以了解您编写的每个 Prisma Client 查询返回数据的精确形状。

我们的 TypeScript 资源

TypeScript 柏林聚会

TypeScript 柏林聚会始于 2019 年,是世界上最受欢迎的 TypeScript 聚会之一

Prisma TypeScript 示例

可直接运行的示例项目,使用 Prisma、TypeScript 以及各种不同的框架和 API 技术

使用 TypeScript、PostgreSQL 和 Prisma 构建现代后端

一个使用 hapi 和 Prisma 构建现代后端系列的教程

© . All rights reserved.