使用 Prisma(JavaScript 和 TypeScript 的更佳 ORM)在 GraphQL 中查询来自 MySQL、PostgreSQL 和 SQL Server 数据库的数据。
// Creating a new recordawait prisma.user.create({firstName: “Alice”,email: “alice@prisma.io”})
id firstName email1 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 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}
无论您是使用 SDL 优先的方法使用 graphql-tools
中的 makeExecutableSchema
还是代码优先的方法(如 Nexus 或 TypeGraphQL),都可以在 GraphQL 解析器中使用 Prisma。
注意: 以下所有示例均使用 express-graphql
作为 GraphQL 服务器,但它们也适用于任何其他库,如 Apollo Server、NestJS 或 Mercurius。
当使用 SDL 优先的方法构建 GraphQL 模式时,您需要以字符串形式提供您的GraphQL 模式定义和一个实现此定义的解析器映射。在您的解析器内部,您可以使用 Prisma Client 来读取和写入数据库中的数据,以便解析传入的 GraphQL 查询和 mutation。
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 查询和 mutation。
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 社区和生态系统向前发展。
一份关于 GraphQL 社区和生态系统的每周新闻通讯
GraphQL 柏林聚会始于 2016 年,是世界上最受欢迎的 GraphQL 聚会之一
我们构建了流行的全栈 GraphQL 教程网站 How to GraphQL,以帮助教育开发人员了解 GraphQL。
我们有多个渠道,您可以在其中与我们的社区成员以及 Prisma 团队互动。