Skip to content

Node.js Prisma ORM

Prisma 是现代化的数据库工具套件,提供类型安全的查询构建器 + ORM 层 + 数据库迁移,支持 PostgreSQL / MySQL / SQLite。

初始化

bash
npm install -g prisma
prisma init --datasource-provider mysql

生成 .envprisma/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 dev

CRUD 操作

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) } })

三层数据库方案对比

mysql2KnexPrisma
层级驱动层查询生成器ORM
写法手写 SQL链式调用声明式 API
类型安全强(自动生成类型)
关联查询手写 JOIN手写 JOINinclude 自动关联
迁移手动手动prisma migrate dev
学习成本中高