為什么你要考慮使用Prisma
Prisma正迅速成為我的首選ORM框架,這是有原因的。在我們創建一個web項目時,設置鏈接數據庫一直是一項比較繁瑣的任務。雖然ORM已經存在了一段時間,并且在大多數情況下已經簡化了這個過程。然而,它們似乎總是在某個方面有所欠缺。
對于一個開發人員來說,每一個ORM框架,通常都有一些開發人員希望它能做得更好一點。但對我來說,它這個設計模式紿我帶來了快速查看和編輯數據的能力。Prisma為我解決這些問題的同時也解決了一些我不知道的問題。
什么是Prisma
Prisma稱自己為下一代 Node.js、TypeScript、Go 的數據庫 ORM框架
Prisma是一個開源的數據庫工具鏈項目,幫助開發人員更快地構建應用程序并減少錯誤,支持PostgreSQL、MySQL、MongoDB、SQL Server和SQLite。
Prisma Schema
Prisma的核心是通過Primsa Schema文件來定義數據模型。它是用一種叫做PSL(Prisma Schema Language)的屬性語言編寫的,這需要幾分鐘時間來熟悉。Schema文件主要有三個主要組成部分。首先是你的數據源datasource,這個配置數據庫的URL和數據庫類型的地方。在這種情況下,provider用來表示使用的數據庫的類型。如下所示:
datasource db {
url = env("DATABASE_URL")
provider = "postgresql"
}
下一個部分是生成器(Generator)字段。這個字段指定了應該根據數據模型生成什么客戶端。這個功能就是讓你如何使用Prisma生成的客戶端來CRUD。這些我們稍后會介紹,這一部分看起來像這樣:?
generator client {
provider = "prisma-client-js"
}
最后,我們要定義我們的應用模型數據模型(Data model)在數據庫中的字段 ,這將是這個文件的重點。在這里你創建你的應用模型和數據間的映射關系。這一部分也需要最長的時間來適應,然而,它看起來仍然會顯得很熟悉。PSL不是創建普通的JS對象,而是以一種不同的方式來格式化模型,但所有的字段都與你習慣的交互方式相同。下面這個就是一個用戶模型的例子:
model User {
id Int (autoincrement())
createdAt DateTime (now())
email String
name String?
role Role (USER)
posts Post[]
}
這個用戶模型我們有一個有六個字段,"id "是一個整數,并有一個默認值且自增。還有一些標準的,其它的、唯一的類型屬性你可以在 官方文檔) 中探索。你的下一個問題可能是 "模型間的關聯關系是如何工作的?",幸好它們相當簡單易懂。下面是一個用戶發的帖子的模型。
model Post {
id Int (autoincrement())
createdAt DateTime (now())
updatedAt DateTime
published Boolean (false)
title String .VarChar(255)
author User? (fields: [authorId], references: [id])
authorId Int?
}
這個關聯關系定義在帖子的作者字段中。意思非常簡單,author字段是一個用戶,它引用了用戶模型User。然后我們創建一個關聯關系,用貼子模型Post上的字段 "authorId "引用用戶模型User中的 "id "字段。最后一個要解決的大問題是使你的數據庫與你的定義的模型保持同步,Prisma通過Prisma Migrate做到這一點。這是一個簡單的命令行,可以將你的數據庫與你可能有的任何變化一起遷移,具體可參考 官方文檔的遷移功能。<a name="v8LM3"></a>。
CRUD
記住你的Prisma Schema文件中的生成器Generator部分,這里是你要使用的地方。你的Generator塊是Prisma用來決定如何建立其客戶端的東西。它的建立是為了對你的數據進行類型安全的查詢。這意味著查詢你查詢數據的操作函數將變得更加容易理解和使用。
const newUser = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
},
})
const users = await prisma.user.findMany()
這是一個創建和查找用戶的例子。當為你的數據生成一個客戶端時,Prisma將方法添加到Prisma對象中,與你的數據完全相關。繼續以用戶和帖子為例,我們也將能夠做到這一點。
prisma.post.create()
如果要想進一步了解更多復雜的查詢操作,請查看這里。<a name="DrufO"></a>。
Prisma的好處
Introspection
這里至少有兩個特點讓我至少考慮它,對于任何項目,即使是那些我已經在使用不同的ORM的項目。Introspection是一項功能,它允許你使用你已經創建的數據庫來生成一個與你的數據庫相匹配的Prisma模式。因此,如果你有一個已經按你喜歡的方式設置的數據庫,但想嘗試Prisma,這個過程是無縫和簡單的。你的Prisma Schema文件已經生成,你可以立即開始使用Prisma。所有這些都在一個單一的命令中完成。
prisma db pull
Prisma Studio
Prisma還創建了一個本地的web客戶端,你可以隨時的改變或更新數據。Prisma Studio對于快速檢查數據或改變一些東西進行測試是非常好的。它可能不像PgAdmin或MySql Workbench那樣先進,但它仍然為大多數數據庫工作提供了足夠的選擇。我唯一不滿意的是,你不能像使用Sanity那樣定制外觀界面。