使用 Prisma(一个更好的 JavaScript 和 TypeScript ORM)在 GraphQL 中从 MySQL、PostgreSQL 和 SQL Server 数据库中查询数据。
// Creating a new recordawait prisma.user.create({ firstName: “Alice”, email: “alice@prisma.io”})
id firstName email 1 Bobby bobby@tables.io2 Nilufar nilu@email.com3 Jürgen jums@dums.edu4 Alice alice@prisma.io
GraphQL 为 Web 和移动应用程序提供了一种从 API 获取数据的强大方法。但是,作为后端开发人员,您仍然需要负责如何您的 GraphQL 服务器通过实现 GraphQL 解析器来从数据库中检索请求的数据 - 这就是 Prisma ORM 的作用。Prisma ORM 用于 GraphQL 解析器中查询数据库。它与来自 GraphQL 生态系统的所有您喜欢的工具和库无缝集成。
您还可以使用我们的其他工具增强 Prisma ORM 的使用
• Prisma Accelerate 是一种全局数据库缓存和可扩展连接池,可以加速您的数据库查询。
• Prisma Pulse 使您能够以类型安全的方式构建响应式实时应用程序。Pulse 是实现 GraphQL 订阅或实时查询的完美伴侣。
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 String 6 name String? 7 posts Post[]8}9
10// 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';5
6const prisma = new PrismaClient();7
8const typeDefs = `9 type User {10 email: String!11 name: String12 }13
14 type Query {15 allUsers: [User!]!16 }17`;18
19const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};26
27export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});31
32const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));36
37app.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';5
6const prisma = new PrismaClient();7
8const typeDefs = `9 type User {10 email: String!11 name: String12 }13
14 type Query {15 allUsers: [User!]!16 }17`;18
19const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};26
27export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});31
32const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));36
37app.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 社区和生态系统向前发展。
围绕 GraphQL 社区和生态系统的每周通讯
柏林 GraphQL 会议始于 2016 年,是世界上最受欢迎的 GraphQL 会议之一
我们构建了流行的全栈 GraphQL 教程网站 How to GraphQL,以帮助教育开发人员了解 GraphQL。
我们拥有多个渠道,您可以通过这些渠道与我们社区的成员以及 Prisma 团队互动。