精读《Prisma 的使用》

本文详细介绍了 Prisma ORM,重点探讨了 Prisma Schema 的设计与用法,以及 Prisma Client 的 CRUD 操作。通过示例展示了如何使用 Prisma Schema 定义数据模型,并利用 Prisma Client 进行数据库交互。文章还讨论了 ORM 的性能问题及 Prisma 的优势,如减少样板代码和稳定数据库模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORM(Object relational mappers) 的含义是,将数据模型与 Object 建立强力的映射关系,这样我们对数据的增删改查可以转换为操作 Object(对象)。

Prisma 是一个现代 Nodejs ORM 库,根据 Prisma 官方文档 可以了解这个库是如何设计与使用的。

概述

Prisma 提供了大量工具,包括 Prisma Schema、Prisma Client、Prisma Migrate、Prisma CLI、Prisma Studio 等,其中最核心的两个是 Prisma Schema 与 Prisma Client,分别是描述应用数据模型与 Node 操作 API。

与一般 ORM 完全由 Class 描述数据模型不同,Primsa 采用了一个全新语法 Primsa Schema 描述数据模型,再执行 prisma generate 产生一个配置文件存储在 node_modules/.prisma/client 中,Node 代码里就可以使用 Prisma Client 对数据增删改查了。

Prisma Schema

Primsa Schema 是在最大程度贴近数据库结构描述的基础上,对关联关系进行了进一步抽象,并且背后维护了与数据模型的对应关系,下图很好的说明了这一点:

491f9acb041b238a9f6908682c9227d3.png

可以看到,几乎与数据库的定义一模一样,唯一多出来的 postsauthor 其实是弥补了数据库表关联外键中不直观的部分,将这些外键转化为实体对象,让操作时感受不到外键或者多表的存在,在具体操作时再转化为 join 操作。下面是对应的 Prisma Schema:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String? @map("post_content")
  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[]
}

datasource db 申明了链接数据库信息;generator client 申明了使用 Prisma Client 进行客户端操作,也就是说 Prisma Client 其实是可以替换实现的;model 是最核心的模型定义。

在模型定义中,可以通过 @map 修改字段名映射、@@map 修改表名映射,默认情况下,字段名与 key 名相同:

model Comment {
  title @map("comment_title")

  @@map("comments")
}

字段由下面四种描述组成:

  • 字段名。

  • 字段类型。

  • 可选的类型修饰。

  • 可选的属性描述。

model Tag {
  name String? @id
}

在这个描述里,包含字段名 name、字段类型 String、类型修饰 ?、属性描述 @id

字段类型

字段类型可以是 model,比如关联类型字段场景:

model Post {
  id       Int       @id @default(autoincrement())
  // Other fields
  comments Comment[] // A post can have many comments
}

model Comment {
  id     Int
  // Other fields
  Post   Post? @relation(fields: [postId], references: [id]) // A comment can have one post
  postId Int?
}

关联场景有 1v1, nv1, 1vn, nvn 四种情况,字段类型可以为定义的 model 名称,并使用属性描述 @relation 定义关联关系,比如上面的例子,描述了 CommenctPost 存在 nv1 关系,并且 Comment.postIdPost.id 关联。

字段类型还可以是底层数据类型,通过 @db. 描述,比如:

Prisma 是一个现代化的数据库工具包,它可以帮助开发者更轻松地管理和操作数据库Prisma 支持多种数据库,包括 MySQL。 要在 Prisma使用 MySQL,你需要进行以下步骤: 1. 首先,你需要在你的项目中安装 Prisma。可以使用 npm 或者 yarn 进行安装: ``` npm install @prisma/cli ``` 2. 安装完成后,你可以使用 Prisma CLI 初始化一个新的 Prisma 项目。在终端中运行以下命令: ``` npx prisma init ``` 这将创建一个新的 Prisma 项目,并生成一个 prisma 目录。 3. 接下来,你需要在 Prisma 的 `schema.prisma` 文件中定义你的数据模型和数据库连接。打开 `prisma/schema.prisma` 文件,然后添加以下代码: ```prisma datasource db { provider = "mysql" url = "mysql://username:password@localhost:3306/database_name" } generator client { provider = "prisma-client-js" } ``` 将 `username`、`password` 和 `database_name` 替换为你自己的 MySQL 连接信息。 4. 定义完数据模型和数据库连接后,运行以下命令来生成 Prisma 客户端: ``` npx prisma generate ``` 这将根据你的数据模型生成 Prisma 客户端代码。 5. 现在,你可以在你的应用程序中使用 Prisma 客户端来操作 MySQL 数据库了。你可以通过导入 Prisma 客户端并使用生成的方法来进行查询、创建、更新和删除操作。 ```javascript const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); async function main() { const users = await prisma.user.findMany(); console.log(users); } main() .catch(e => console.error(e)) .finally(() => prisma.$disconnect()); ``` 这是一个简单的示例,查询所有的用户并打印出来。 这就是使用 Prisma 连接和操作 MySQL 数据库的基本步骤。你可以在 Prisma 文档中找到更多关于 PrismaMySQL 的详细信息和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值