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做到这一点。这是一个简单的命令行,可以将你的数据库与你可能有的任何变化一起迁移,具体可参考 官方文档的迁移功能。。
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()
Prisma的好处
Introspection
这里至少有两个特点让我至少考虑它,对于任何项目,即使是那些我已经在使用不同的ORM的项目。Introspection是一项功能,它允许你使用你已经创建的数据库来生成一个与你的数据库相匹配的Prisma模式。因此,如果你有一个已经按你喜欢的方式设置的数据库,但想尝试Prisma,这个过程是无缝和简单的。你的Prisma Schema文件已经生成,你可以立即开始使用Prisma。所有这些都在一个单一的命令中完成。
prisma db pull
Prisma Studio
Prisma还创建了一个本地的web客户端,你可以随时的改变或更新数据。Prisma Studio对于快速检查数据或改变一些东西进行测试是非常好的。它可能不像PgAdmin或MySql Workbench那样先进,但它仍然为大多数数据库工作提供了足够的选择。我唯一不满意的是,你不能像使用Sanity那样定制外观界面。