Prisma:適用于Node.js和TypeScript的完整ORM

Prisma是Node.js和TypeScript的下一代ORM。經(jīng)過(guò)兩年多的開(kāi)發(fā),我們很高興分享所有Prisma工具已準(zhǔn)備好投入生產(chǎn)!
目錄
對(duì)象關(guān)系映射的新范例
數(shù)據(jù)庫(kù)是很難的
Prisma-Node.js和TypeScript的完整ORM
Prisma適合任何技術(shù)棧
為任務(wù)關(guān)鍵型應(yīng)用程序的生產(chǎn)做好準(zhǔn)備
從GraphQL到數(shù)據(jù)庫(kù)
我們關(guān)心開(kāi)發(fā)人員
公司在生產(chǎn)中使用Prisma
從原型到開(kāi)發(fā)再到生產(chǎn)
下一代Web框架基于Prisma構(gòu)建
開(kāi)源及其他
對(duì)象關(guān)系映射的新范例
Prisma是適用于Node.js和TypeScript的下一代開(kāi)源ORM。它包含以下工具:
Prisma Client——自動(dòng)生成且類型安全的數(shù)據(jù)庫(kù)客戶端 Prisma Migrate——聲明式數(shù)據(jù)建模和可自定義的遷移 Prisma Studio——現(xiàn)代化的用戶界面,可查看和編輯數(shù)據(jù)

這些工具可以在任何Node.js或TypeScript項(xiàng)目中一起或單獨(dú)采用。Prisma當(dāng)前支持PostgreSQL,MySQL,SQLite,SQL Server(預(yù)覽版)。MongoDB的連接器正在開(kāi)發(fā)中,請(qǐng)?jiān)诖颂幾?cè)Early Access程序。
數(shù)據(jù)庫(kù)是很難的
使用數(shù)據(jù)庫(kù)是應(yīng)用程序開(kāi)發(fā)中最具挑戰(zhàn)性的領(lǐng)域之一。數(shù)據(jù)建模,模式遷移和編寫數(shù)據(jù)庫(kù)查詢是應(yīng)用程序開(kāi)發(fā)人員每天處理的常見(jiàn)任務(wù)。
在Prisma,我們發(fā)現(xiàn)Node.js生態(tài)系統(tǒng)雖然在構(gòu)建數(shù)據(jù)庫(kù)支持的應(yīng)用程序中越來(lái)越流行,但并未為應(yīng)用程序開(kāi)發(fā)人員提供處理這些任務(wù)的現(xiàn)代工具。
應(yīng)用程序開(kāi)發(fā)人員應(yīng)該關(guān)心數(shù)據(jù),而不是SQL
隨著工具變得更加專業(yè)化,應(yīng)用程序開(kāi)發(fā)人員應(yīng)該能夠?qū)W⒂跒榻M織實(shí)現(xiàn)增值功能,而不必花費(fèi)時(shí)間通過(guò)編寫膠合代碼來(lái)遍歷應(yīng)用程序的各個(gè)層。
Prisma-Node.js和TypeScript的完整ORM
盡管Prisma解決了與傳統(tǒng)ORM相似的問(wèn)題,但是其對(duì)這些問(wèn)題的處理方式卻根本不同。
Prisma模式中的數(shù)據(jù)建模
使用Prisma時(shí),您可以在Prisma模式中定義數(shù)據(jù)模型。以下是Prisma模型的樣例:
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
這些模型中的每一個(gè)都映射到基礎(chǔ)數(shù)據(jù)庫(kù)中的表,并充當(dāng)Prisma Client提供的生成的數(shù)據(jù)訪問(wèn)API的基礎(chǔ)。Prisma的VS Code擴(kuò)展提供語(yǔ)法高亮顯示,自動(dòng)補(bǔ)全,快速修復(fù)和許多其他功能,使數(shù)據(jù)建模具有神奇而令人愉悅的體驗(yàn)。
使用Prisma Migrate進(jìn)行數(shù)據(jù)庫(kù)遷移
Prisma Migrate將Prisma模式轉(zhuǎn)換為所需的SQL,以創(chuàng)建和更改數(shù)據(jù)庫(kù)中的表??梢酝ㄟ^(guò)Prisma CLI提供的 prisma migration 命令使用它。
PostgreSQL:
CREATE TABLE "Post" (
"id" SERIAL NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,
PRIMARY KEY ("id")
);
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"email" TEXT NOT NULL,
"name" TEXT,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");
ALTER TABLE "Post" ADD FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
在基于Prisma模式自動(dòng)生成SQL的同時(shí),您可以輕松地根據(jù)自己的特定需求對(duì)其進(jìn)行自定義。通過(guò)這種方法,Prisma Migrate在生產(chǎn)率和控制力之間取得了很好的平衡。
使用Prisma Client進(jìn)行直觀且類型安全的數(shù)據(jù)庫(kù)訪問(wèn)
與Prisma Client一起使用的主要好處是,它使開(kāi)發(fā)人員可以在對(duì)象中進(jìn)行思考,因此提供了一種熟悉且自然的方式來(lái)推理其數(shù)據(jù)。
Prisma Client沒(méi)有模型實(shí)例的概念。相反,它有助于制定始終返回純JavaScript對(duì)象的數(shù)據(jù)庫(kù)查詢。多虧了生成的類型,您也為這些查詢獲得了自動(dòng)補(bǔ)全功能。
另外,作為對(duì)TypeScript開(kāi)發(fā)者的一種獎(jiǎng)勵(lì)。Prisma Client查詢的所有結(jié)果都是完全類型化的。事實(shí)上,Prisma提供了任何TypeScript ORM中最強(qiáng)大的類型安全保證(你可以在這里閱讀與TypeORM的類型安全比較)。
Prisma Studio的現(xiàn)代管理界面
Prisma還為你的數(shù)據(jù)庫(kù)提供了一個(gè)現(xiàn)代化的管理界面--想想看phpMyAdmin,但在2021年。??

Prisma適合任何技術(shù)棧
Prisma與你構(gòu)建的應(yīng)用程序無(wú)關(guān),并將很好地補(bǔ)充你的技術(shù)棧,無(wú)論你喜歡的技術(shù)是什么。你可以在這里找到更多關(guān)于Prisma如何與你喜歡的框架或庫(kù)一起工作的信息。

為任務(wù)關(guān)鍵型應(yīng)用程序的生產(chǎn)做好準(zhǔn)備
Prisma在過(guò)去三年中發(fā)展了很多,我們非常高興與開(kāi)發(fā)人員社區(qū)分享結(jié)果。
從GraphQL到數(shù)據(jù)庫(kù)
自從我們開(kāi)始構(gòu)建開(kāi)發(fā)人員工具以來(lái),作為一家公司,在過(guò)去的幾年中,我們經(jīng)歷了許多主要的產(chǎn)品迭代和發(fā)展過(guò)程:

Prisma是我們從成為GraphQL生態(tài)系統(tǒng)的早期創(chuàng)新者中學(xué)到的經(jīng)驗(yàn)教訓(xùn)以及我們從小型創(chuàng)業(yè)公司到大型企業(yè)的各種規(guī)模的數(shù)據(jù)層獲得的見(jiàn)解的結(jié)果。
自三年前首次發(fā)布以來(lái),Prisma已被成千上萬(wàn)的公司使用,Prisma經(jīng)過(guò)了實(shí)戰(zhàn)測(cè)試,并準(zhǔn)備用于關(guān)鍵任務(wù)應(yīng)用程序。
我們關(guān)心開(kāi)發(fā)人員
Prisma是開(kāi)放開(kāi)發(fā)的。我們的產(chǎn)品和工程團(tuán)隊(duì)正在監(jiān)控GitHub的問(wèn)題,通常在問(wèn)題打開(kāi)后24小時(shí)內(nèi)做出響應(yīng)。
新版本每?jī)芍馨l(fā)布一次,包含新特性、bug修復(fù)和大量改進(jìn)。每次發(fā)布后,我們都會(huì)在Youtube上直播新功能,并從社區(qū)獲得反饋。
我們還會(huì)嘗試通過(guò)專門的社區(qū)支持團(tuán)隊(duì),在開(kāi)發(fā)人員提出關(guān)于Prisma的任何問(wèn)題時(shí),無(wú)論是在Slack,GitHub討論區(qū)還是Stackoverflow上,都可以為他們提供幫助。
這是我們的社區(qū)數(shù)量:

公司在生產(chǎn)中使用Prisma
我們很高興看到Prisma如何幫助各種規(guī)模的公司提高生產(chǎn)力并更快地交付產(chǎn)品。
在我們的旅程中,阿迪達(dá)斯、HyreCar、Agora Systems、Labelbox等公司為我們提供了關(guān)于如何發(fā)展產(chǎn)品的寶貴意見(jiàn)。我們有幸與一些最具創(chuàng)新性和獨(dú)創(chuàng)性的技術(shù)領(lǐng)導(dǎo)者合作。
如果您想了解Prisma如何幫助這些公司提高生產(chǎn)力,請(qǐng)查看以下資源:
Rapha
blog——Prisma如何幫助Rapha管理其移動(dòng)應(yīng)用程序數(shù)據(jù) Talk——Prisma在Rapha iopool
blog——iopool如何使用Prisma在不到6個(gè)月的時(shí)間內(nèi)重構(gòu)其應(yīng)用程序 Talk——Prisma在ipool
從原型到開(kāi)發(fā)再到生產(chǎn)
最好的開(kāi)發(fā)者工具是那些不走尋常路的工具,并能輕松地適應(yīng)項(xiàng)目的日益復(fù)雜化。這正是我們?cè)O(shè)計(jì)Prisma的方式。

Prisma有內(nèi)置的工作流程,適用于開(kāi)發(fā)生命周期的所有階段,從原型設(shè)計(jì)到開(kāi)發(fā),到部署,到CI/CD,到測(cè)試等等。
下一代Web框架基于Prisma構(gòu)建
我們特別感到謙虛,許多框架和庫(kù)作者選擇Prisma作為其工具的默認(rèn)ORM。以下是一些使用Prisma的高級(jí)框架的選擇:
RedwoodJS——基于React和GraphQL的全??蚣?/section> Blitz——基于Next.js的全??蚣?/section> KeystoneJS——無(wú)頭CMS Wasp——用于基于React開(kāi)發(fā)全棧Web應(yīng)用程序的DSL Amplication——用于基于React和NestJS構(gòu)建全棧應(yīng)用程序的工具集
開(kāi)源及其他
我們是一家由VC資助的公司,其團(tuán)隊(duì)熱衷于改善應(yīng)用程序開(kāi)發(fā)人員的生活。當(dāng)我們通過(guò)構(gòu)建開(kāi)源工具開(kāi)始我們的旅程時(shí),我們對(duì)Prisma的長(zhǎng)期愿景遠(yuǎn)比構(gòu)建“僅” ORM更大。
在我們最近的企業(yè)活動(dòng)和Prisma聚會(huì)中,我們開(kāi)始分享這一愿景,我們稱之為應(yīng)用程序數(shù)據(jù)平臺(tái)。
Prisma的愿景是使Facebook、Twitter和Airbnb等公司使用的定制數(shù)據(jù)訪問(wèn)層民主化,并使其適用于所有規(guī)模的開(kāi)發(fā)團(tuán)隊(duì)和組織。
這個(gè)想法主要是受到Facebook、Twitter和Airbnb等公司的啟發(fā),這些公司在其數(shù)據(jù)庫(kù)和其他數(shù)據(jù)源的基礎(chǔ)上建立了定制的數(shù)據(jù)訪問(wèn)層,使應(yīng)用程序開(kāi)發(fā)人員更容易以安全和高效的方式訪問(wèn)他們需要的數(shù)據(jù)。
Prisma的目標(biāo)是使這種自定義數(shù)據(jù)訪問(wèn)層的思想民主化,并使其可用于任何規(guī)模的開(kāi)發(fā)團(tuán)隊(duì)和組織。


最近文章
22個(gè)有用的JavaScript單行程序 使用JavaScript訪問(wèn)設(shè)備硬件的新標(biāo)準(zhǔn) Flutter還是React Native?誰(shuí)是2021年構(gòu)建移動(dòng)應(yīng)用程序的最佳選擇? CSS的:placeholder-shown偽類有什么用? HTML在錨點(diǎn)元素(鏈接)上定義了ping屬性是干什么用的? 你應(yīng)該經(jīng)常使用的7種Vue模式 面向?qū)ο缶幊淌怯?jì)算機(jī)科學(xué)的最大錯(cuò)誤 編程日歷小程序,對(duì)小程序云開(kāi)發(fā)和生成海報(bào)的實(shí)踐 一個(gè)付費(fèi) chrome 插件的一生
粉絲福利

