Node.js Prisma ORM
Prisma 是现代化的数据库工具套件,提供类型安全的查询构建器 + ORM 层 + 数据库迁移,支持 PostgreSQL / MySQL / SQLite。
初始化
bash
npm install -g prisma
prisma init --datasource-provider mysql生成 .env 和 prisma/schema.prisma。
连接配置
.env:
DATABASE_URL="mysql://root:123456@localhost:3306/xiaoman"定义数据模型 prisma/schema.prisma
prisma
model Post {
id Int @id @default(autoincrement())
title String
publish Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}执行迁移创建表:
bash
prisma migrate devCRUD 操作
ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// 查询全部 + 关联查询
const data = await prisma.user.findMany({
include: { posts: true }
})
// 单个查询
const row = await prisma.user.findMany({
where: { id: Number(req.params.id) }
})
// 新增(同时创建关联数据)
const data = await prisma.user.create({
data: {
name, email,
posts: { create: { title: '标题', publish: true } }
}
})
// 更新
await prisma.user.update({
where: { id: Number(id) },
data: { name, email }
})
// 删除(先删关联再删主)
await prisma.post.deleteMany({ where: { authorId: Number(id) } })
await prisma.user.delete({ where: { id: Number(id) } })三层数据库方案对比
| mysql2 | Knex | Prisma | |
|---|---|---|---|
| 层级 | 驱动层 | 查询生成器 | ORM |
| 写法 | 手写 SQL | 链式调用 | 声明式 API |
| 类型安全 | 无 | 弱 | 强(自动生成类型) |
| 关联查询 | 手写 JOIN | 手写 JOIN | include 自动关联 |
| 迁移 | 手动 | 手动 | prisma migrate dev |
| 学习成本 | 低 | 中 | 中高 |