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

使用 Prisma 从 MySQL、PostgreSQL 和 SQL Server 数据库查询数据 - 一个面向 Node.js 的类型安全的 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 和 TypeScript 如何协同工作

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

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

Prisma 模式

Prisma 模式使用 Prisma 的建模语言来定义您的数据库模式,并生成相应的 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 模式生成的类型确保所有数据库查询都是类型安全的。 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 代码示例

定义一次您的模式,Prisma 将为您生成 TypeScript 类型。无需在数据库模式和应用程序代码中的类型之间进行手动同步。

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

类型安全的数据库查询

零成本类型安全性

使用 Prisma Client 进行的查询始终会推断其返回类型,这使得更容易理解返回的数据 - 即使您获取关系时也是如此。

1// Inferred type:
2// User & {
3// posts: Post[];
4// }
5const user = await prisma.user.create({
6 data: {
7 email: '[email protected]',
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: '[email protected]',
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 模式映射到数据库,这样您就不需要编写 SQL 来管理您的数据库模式。

过滤器、分页和排序

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 Berlin 会议

TypeScript Berlin 会议始于 2019 年,是世界上最受欢迎的 TypeScript 会议之一

Prisma TypeScript 示例

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

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

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