前言
最近开发过程中接触到了 Prisma
,所以今天就整理了下 Prisma
使用过程,希望可以帮助快速上手并应用到实际项目中。
往期精彩推荐
- VsCode Colipot 🚗 + MCP Tools ✈️ = 让你的编程体验直接起飞 🚀🚀🚀
- 🚀🚀🚀MCP SDK 快速接入 DeepSeek 并添加工具!万万没想到MCP这么简单好用!
- 🚀🚀🚀 这六个事半功倍的 Pinia 库,你一定要知道!
- 更多精彩文章欢迎关注我的公众号:萌萌哒草头将军
正文
安装与初始化
首先安装 Prisma
CLI 和 Prisma
Client:
bash
npm install prisma --save-dev
npm install @prisma/client
然后执行初始化命令:
bash
npx prisma init
初始化后项目中会生成以下文件结构:
bash
prisma/
schema.prisma # 模型定义文件
.env # 数据库连接配置
配置数据库
打开 schema.prisma
,配置数据库连接信息,例如使用 PostgreSQL:
prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
接着在 .env
文件中写入实际连接字符串:
ini
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
定义数据模型
在 schema.prisma
文件中添加模型定义,比如用户和文章模型:
prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
执行数据库迁移
运行迁移命令,将模型同步到数据库中:
bash
npx prisma migrate dev --name init
每次修改模型后都应执行新的迁移命令。
使用 Prisma Client
修改完模型后需要重新生成客户端:
bash
npx prisma generate
然后就可以开始数据库操作了:
ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// 创建用户
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'Alice',
},
})
// 查询所有用户
const users = await prisma.user.findMany()
// 更新用户
await prisma.user.update({
where: { email: '[email protected]' },
data: { name: 'Alicia' },
})
// 删除用户
await prisma.user.delete({
where: { email: '[email protected]' },
})
高级功能
关联查询
ts
// 查询用户及其文章
const usersWithPosts = await prisma.user.findMany({
include: { posts: true },
})
嵌套写入
ts
await prisma.user.create({
data: {
email: '[email protected]',
name: 'Bob',
posts: {
create: {
title: 'Hello World',
},
},
},
})
过滤、排序与分页
ts
// 过滤已发布文章
await prisma.post.findMany({
where: { published: true },
})
// 排序用户
await prisma.user.findMany({
orderBy: { name: 'asc' },
})
// 分页查询
await prisma.post.findMany({
skip: 10,
take: 5,
})
可视化管理:Prisma Studio
bash
npx prisma studio
启动后你可以在浏览器中直观地查看和编辑数据库数据,非常适合开发调试。
最佳实践
单例 Prisma Client
防止在热更新或函数中重复创建 PrismaClient:
ts
// lib/prisma.ts
import { PrismaClient } from '@prisma/client'
const prisma = global.prisma || new PrismaClient()
if (process.env.NODE_ENV !== 'production') global.prisma = prisma
export default prisma
安全关闭连接
ts
process.on('beforeExit', async () => {
await prisma.$disconnect()
})
批量操作
ts
await prisma.$transaction([
prisma.user.create({ data: { name: 'Alice' } }),
prisma.post.create({ data: { title: 'Hello' } }),
])
与 GraphQL 的结合
如果项目中使用 Apollo Server,可以直接在 resolver 中使用 Prisma 操作数据库:
ts
const resolvers = {
Query: {
users: () => prisma.user.findMany(),
user: (_, args) => prisma.user.findUnique({ where: { id: Number(args.id) } }),
},
User: {
posts: (parent) => prisma.user.findUnique({ where: { id: parent.id } }).posts(),
},
}
最后
Prisma 提供了一套现代化、类型安全、易扩展的数据库操作方式,提升了开发效率与代码可维护性。通过今天的教程,相信你已经对 Prisma 的使用有了基本掌握。后续还可以结合 REST、GraphQL、Serverless 等架构深入使用。
今天的分享就这些了,感谢大家的阅读,如果文章中存在错误的地方欢迎指正!