使用 Prisma 和 **Apollo** 轻松实现类型安全的数据库访问

使用 Prisma 从 MySQL、PostgreSQL 和 SQL Server 数据库中查询 GraphQL 数据 - 一个更好的 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 和 Apollo 如何协同工作

Apollo 提供了一个很棒的生态系统,用于使用 GraphQL 构建应用程序。当使用 Apollo Server 针对数据库构建 GraphQL API 时,您需要在 GraphQL 解析器中发送数据库查询 - 这就是 Prisma 发挥作用的地方。

Prisma 是一种在 Apollo Server 的 GraphQL 解析器内部用于查询数据库的 ORM。它与 GraphQL 生态系统中的所有您喜欢的工具和库完美配合使用。了解有关 Prisma 与 GraphQL 的更多信息。

Prisma 模式

Prisma 模式 使用 Prisma 的建模语言来定义您的数据库模式。它使数据建模变得简单直观,尤其是在建模关系时。

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

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 title String
14 content String?
15 authorId String
16 author User
17}

Prisma 和 Apollo 的用例

Prisma 可用于 Apollo Server 的 GraphQL 解析器中,通过读取和写入数据库中的数据来实现 GraphQL 查询和变异。

它与 Apollo 的原生 SDL-first 方法或 Nexus 或 TypeGraphQL 等库提供的代码优先方法兼容。

Apollo Server (SDL-first)

Apollo Server — SDL-First

当使用 Apollo 的原生 SDL-first 方法构建 GraphQL 模式时,您会将GraphQL 模式定义作为字符串提供,以及一个实现此定义的解析器映射。在您的解析器中,您可以使用 Prisma Client 读取和写入数据库中的数据,以解析传入的 GraphQL 查询和变异。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });
Nexus (代码优先)
TypeGraphQL (代码优先)

Apollo Server — SDL-First

当使用 Apollo 的原生 SDL-first 方法构建 GraphQL 模式时,您会将GraphQL 模式定义作为字符串提供,以及一个实现此定义的解析器映射。在您的解析器中,您可以使用 Prisma Client 读取和写入数据库中的数据,以解析传入的 GraphQL 查询和变异。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });

"Prisma 提供了一种出色的建模语言来定义您的数据库,以及一个强大的 ORM 用于在 JavaScript & TypeScript 中处理 SQL。它是 **Apollo Server 的完美搭配**,使构建具有数据库的 GraphQL API 变得令人愉快。"

Kurt Kemple Kurt Kemple -
开发者关系经理 of Apollo

为什么选择 Prisma 和 Apollo?

端到端类型安全

为您的应用程序获取一致的类型,从数据库到前端,以提高生产力和避免错误。

优化的数据库查询

Prisma 内置的数据加载器确保即使对于 N+1 查询也能优化和执行数据库查询。

类型安全的数据库客户端

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

直观的数据建模

Prisma 的建模语言受到 GraphQL SDL 的启发,可以让您直观地描述数据库模式。

轻松的数据库迁移

将您的 Prisma 模式映射到数据库,因此您无需编写 SQL 来管理数据库模式。

过滤器、分页和排序

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

精选的 Prisma & Apollo 示例

如何构建和部署 GraphQL API

一个全面的教程,解释了如何使用 Apollo Server 和 Prisma 构建 GraphQL API 并将其部署到 DigitalOcean 的 App Platform。

SDL-first 入门套件

一个现成的示例项目,包含 SDL-first 模式和 SQLite 数据库

Nexus 入门套件

一个现成的示例项目,包含 Nexus (代码优先) 和 SQLite 数据库