使用 Prisma(适用于 JavaScript 和 TypeScript 的更佳 ORM)在 GraphQL 中查询 MySQL、PostgreSQL 和 SQL Server 数据库中的数据。
Prisma 提供了数据库工具,这些工具是使用出色的 DX 构建高性能 Next.js 应用程序的完美伴侣。
Prisma Postgres 是第一个没有冷启动的无服务器数据库。它基于unikernels,在裸机上运行,并带有一个内置缓存、高性能查询和无缝扩展——所有这些都具有出色的 DX。
了解有关 Prisma Postgres 的更多信息→GraphQL 为 Web 和移动应用程序从 API 获取数据提供了一种强大的方式。然而,作为后端开发人员,您仍然需要通过实现 GraphQL 解析器来负责 GraphQL 服务器如何从数据库中检索请求的数据——这正是 Prisma ORM 的用武之地。Prisma ORM 用于 GraphQL 解析器内部以查询数据库。它与 GraphQL 生态系统中所有您喜欢的工具和库无缝集成。
您还可以通过我们的附加工具来增强 Prisma ORM 的使用
• Prisma Accelerate 是一个全球数据库缓存和可扩展连接池,可以加速您的数据库查询。
• Prisma Postgres 是一种基于裸机服务器和基于 unikernel 的微型虚拟机构建的托管 PostgreSQL 服务,旨在实现高效率、强隔离和可预测的性能,并能够轻松扩展到数百万用户。
Prisma 模式使用 Prisma 的建模语言来定义您的 数据库模式。它使数据建模变得简单直观,尤其是在建模 关系 时。
Prisma 模式的语法深受 GraphQL SDL 的启发。如果您已经熟悉 SDL,那么学习它来建模数据库表将是轻而易举的事。
1// Define the `User` table in the database2model User {3 id String @id @default(cuid())4 email String @unique5 password String6 name String?7 posts Post[]8}910// Define the `Post` table in the database11model Post {12 id String @id @default(cuid())13 title String14 content String?15 authorId String16 author User @relation(fields: [authorId], references: [id])17}
无论您是使用 graphql-tools 中的 makeExecutableSchema 进行 SDL 优先方法,还是使用 Nexus 或 TypeGraphQL 等代码优先方法,Prisma 都可以在您的 GraphQL 解析器中使用。
注意:下面的所有示例都使用 express-graphql 作为 GraphQL 服务器,但它们也适用于任何其他库,如 Apollo Server、NestJS 或 Mercurius。
当使用 SDL 优先方法构建您的 GraphQL 模式时,您将提供您的 GraphQL 模式定义作为字符串和一个解析器映射来实现此定义。在您的解析器中,您可以使用 Prisma Client 在数据库中读取和写入数据,以解析传入的 GraphQL 查询和变更。
1import { PrismaClient } from '@prisma/client';2import express from 'express';3import { graphqlHTTP } from 'express-graphql';4import { makeExecutableSchema } from '@graphql-tools/schema';56const prisma = new PrismaClient();78const typeDefs = `9 type User {10 email: String!11 name: String12 }1314 type Query {15 allUsers: [User!]!16 }17`;1819const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};2627export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});3132const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));3637app.listen(4000);
当使用 SDL 优先方法构建您的 GraphQL 模式时,您将提供您的 GraphQL 模式定义作为字符串和一个解析器映射来实现此定义。在您的解析器中,您可以使用 Prisma Client 在数据库中读取和写入数据,以解析传入的 GraphQL 查询和变更。
1import { PrismaClient } from '@prisma/client';2import express from 'express';3import { graphqlHTTP } from 'express-graphql';4import { makeExecutableSchema } from '@graphql-tools/schema';56const prisma = new PrismaClient();78const typeDefs = `9 type User {10 email: String!11 name: String12 }1314 type Query {15 allUsers: [User!]!16 }17`;1819const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};2627export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});3132const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));3637app.listen(4000);
从数据库到前端,为您的应用程序获得一致的类型,以提高生产力并避免错误。
Prisma 内置的数据加载器确保优化和高性能的数据库查询,即使是 N+1 查询。
Prisma Client 确保完全类型安全的数据库查询,并具有自动完成等优势 - 即使在 JavaScript 中也是如此。
Prisma 的建模语言受 GraphQL SDL 启发,让您直观地描述您的数据库模式。
将您的 Prisma 模式映射到数据库,这样您就不需要编写 SQL 来管理您的数据库模式。
Prisma Client 通过提供方便的 API 来减少样板代码,以实现常见的数据库功能。
在 Prisma,我们热爱 GraphQL 并相信它会持续存在。自运行 Graphcool(一个流行的 GraphQL BaaS)以来,我们过去为 GraphQL 生态系统做出了很多贡献,并且仍然投资于各种帮助开发人员采用 GraphQL 的工具。
一份关于 GraphQL 社区和生态系统的每周通讯
GraphQL 柏林聚会始于 2016 年,是世界上最受欢迎的 GraphQL 聚会之一
我们建立了流行的全栈 GraphQL 教程网站 How to GraphQL,以帮助开发人员了解 GraphQL。
我们有多个渠道,您可以与我们的社区成员以及 Prisma 团队互动。