簡易資料庫訪問
GraphQL 伺服器中

使用 Prisma 在 GraphQL 中查詢 MySQL、PostgreSQL 和 SQL Server 資料庫——為 JavaScript 和 TypeScript 打造的更優秀的 ORM。

tech

什麼是 Prisma?

Prisma 提供了資料庫工具,是構建高效能 Next.js 應用程式並實現卓越開發體驗的理想伴侶。

ORM

Prisma ORM 是最流行的 TypeScript ORM。它提供了人類可讀的模式、自動化遷移以及直觀、完全型別安全的查詢 API。

瞭解更多關於 Prisma ORM

Postgres

Prisma Postgres 是第一個無冷啟動的無伺服器資料庫。它基於單核作業系統(unikernels),執行在裸機上,並內建快取、高效能查詢和無縫擴充套件——所有這些都提供了卓越的開發體驗。

瞭解更多關於 Prisma Postgres

Prisma 和 GraphQL 如何協同工作

GraphQL 提供了一種強大的方式,讓 Web 和移動應用程式可以從 API 獲取資料。然而,作為一名後端開發者,您仍然需要透過實現 GraphQL 解析器來負責您的 GraphQL 伺服器如何從資料庫檢索請求的資料——這就是 Prisma ORM 的用武之地。Prisma ORM 用於 GraphQL 解析器內部,以查詢資料庫。它與您在 GraphQL 生態系統中所有喜愛的工具和庫無縫整合。

您還可以使用我們的附加工具來增強 Prisma ORM 的使用
Prisma Accelerate 是一個全球資料庫快取和可擴充套件連線池,可加速您的資料庫查詢。
Prisma Pulse 使您能夠以型別安全的方式構建響應式、即時應用程式。Pulse 是實現 GraphQL 訂閱或即時查詢的完美伴侶。

Prisma 模式

Prisma 模式使用 Prisma 的建模語言來定義您的資料庫模式。它使資料建模變得簡單直觀,尤其是在建模關係時。

Prisma 模式的語法深受 GraphQL SDL 啟發。如果您已經熟悉 SDL,那麼學習如何使用它來建模資料庫表將輕而易舉。

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 @relation(fields: [authorId], references: [id])
17}

Prisma 和 GraphQL 用例

Prisma 可用於您的 GraphQL 解析器中,無論您是使用 graphql-tools 中的 makeExecutableSchema 進行 SDL 優先的方法,還是使用 Nexus 或 TypeGraphQL 等程式碼優先的方法。

注意: 以下所有示例均使用 express-graphql 作為 GraphQL 伺服器,但它們也適用於任何其他庫,如 Apollo Server、NestJS 或 Mercurius。

GraphQL 工具(SDL 優先)

GraphQL 工具 — SDL 優先

當使用 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: String
12 }
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);
Nexus(程式碼優先)
TypeGraphQL(程式碼優先)

GraphQL 工具 — SDL 優先

當使用 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: String
12 }
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 和 GraphQL?

端到端型別安全

為您的應用程式獲取一致的型別,從資料庫到前端,以提高生產力並避免錯誤。

最佳化的資料庫查詢

Prisma 內建的資料載入器確保最佳化的、高效能的資料庫查詢,即使是 N+1 查詢也不例外。

型別安全的資料庫客戶端

Prisma Client 確保完全型別安全的資料庫查詢,並提供自動補全等優點——即使在 JavaScript 中也是如此。

直觀的資料建模

Prisma 的建模語言受 GraphQL SDL 啟發,讓您可以直觀地描述您的資料庫模式。

簡易資料庫遷移

將您的 Prisma 模式對映到資料庫,這樣您就不需要編寫 SQL 來管理您的資料庫模式。

過濾、分頁和排序

Prisma Client 透過為常見資料庫功能提供便捷的 API 來減少樣板程式碼。

Timeline from GraphCool to Prisma and Nexus Schema

我們熱愛 GraphQL

在 Prisma,我們熱愛 GraphQL 並相信其光明的未來。自運營 Graphcool(一個流行的 GraphQL BaaS),我們過去為 GraphQL 生態系統做出了很多貢獻,並且仍在投資各種幫助開發者採用 GraphQL 的工具。

我們也是 GraphQL 基金會 的自豪成員,並幫助推動 GraphQL 社群和生態系統向前發展。

我們的 GraphQL 資源

GraphQL 週刊

一份關於 GraphQL 社群和生態系統的每週新聞稿

GraphQL 柏林見面會

GraphQL 柏林見面會始於 2016 年,是世界上最受歡迎的 GraphQL 見面會之一

如何使用 GraphQL

我們建立了流行的全棧 GraphQL 教程網站《如何使用 GraphQL》,以幫助開發者瞭解 GraphQL。

© . This site is unofficial and not affiliated with Prisma Data, Inc.