我写后端代码的时候,最烦的事不是业务逻辑有多复杂,而是跟数据库打交道的那堆破事。
写原生SQL吧,字符串拼接容易出错,字段名改了还得去一堆文件里找。用TypeORM或者Sequelize吧,类型提示稀烂,查出来一堆any,心里没底。更别提迁移文件那堆手写的up/down,改个表结构跟拆炸弹似的。
后来团队有人推荐Prisma,说这玩意"真香"。我一开始是抗拒的,毕竟ORM这东西我用过好几个,没一个省心的。但用了大概一周之后,我就把之前那些全扔了。
Prisma是什么
简单说,Prisma是一套数据库工具链,包含三个东西:
Prisma Client:自动生成的类型安全查询构造器。你定义好数据模型,它给你生成完整的TypeScript类型,查询结果自带提示,字段名写错了编译都过不去。
Prisma Migrate:声明式的数据库迁移系统。改模型文件,跑一条命令,迁移文件和SQL自动生成,不需要手写。
Prisma Studio:一个可视化的数据库管理界面,类似phpMyAdmin但好用一百倍。
这仨东西加一起,覆盖了从建模到查询到数据管理的全流程。
核心就一个文件
你用Prisma的时候,所有事情都围绕一个文件转:schema.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?
}
就这么几行,Prisma就能给你生成完整的CRUD操作,包括关联查询、过滤、排序、分页,全都带着类型提示。
类型安全是真的香
我见过太多ORM把TypeScript支持做成半吊子,查出来的数据你用的时候全靠猜。
Prisma不一样。查询结果天然是类型化的,编辑器里点一下就知道有什么字段,嵌套关联也能补全。重构的时候改模型定义,所有引用地方都能被类型系统揪出来,不用自己满项目找。
这才是TypeScript该有的用法。
查数据不用写SQL
Prisma Client的查询接口设计得挺自然的:
查所有用户:
const allUsers = await prisma.user.findMany()
带上关联的帖子:
const allUsers = await prisma.user.findMany({
include: { posts: true }
})
查标题或者内容包含"prisma"的文章:
const filteredPosts = await prisma.post.findMany({
where: {
OR: [
{ title: { contains: 'prisma' } },
{ content: { contains: 'prisma' } }
]
}
})
一次创建用户和关联文章:
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Join us for Prisma Day 2021' }
}
}
})
更新一条记录:
const post = await prisma.post.update({
where: { id: 42 },
data: { published: true }
})
这些操作返回的都是普通的JavaScript对象,没有ORM那种包装层,用起来很直接。
怎么上手
想快速体验的话,5分钟就够了。
先安装:
npm install prisma --save-dev
npm install @prisma/client
配置数据库连接,在项目根目录建一个prisma.config.ts:
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
}
})
然后定义模型,跑生成命令:
npx prisma generate
代码里导入就能用了。模型改了再跑一次生成,客户端自动更新。
如果想本地起一个PostgreSQL开发环境,连Docker都不用:
npx prisma dev
一条命令搞定。
谁在用这玩意
Prisma在Node.js生态里已经算得上标配了,尤其是TypeScript项目。不管你是写REST API、GraphQL还是微服务,只要是Node后端连数据库,这玩意都能用得上。
数据库支持PostgreSQL、MySQL、SQLite、SQL Server、MongoDB和CockroachDB,覆盖面基本够了。
社区也挺活跃,有问题GitHub上提issue响应很快,Discord里也有一堆人帮忙看。
说点实在的
Prisma不是没有槽点。比如冷启动的时候加载客户端会有点慢,serverless环境要额外处理。再比如复杂查询有时候生成的SQL不是最优的,得自己调。
但总的来说,在"写起来爽"和"跑起来快"之间,它平衡得不错。至少在我经手的项目里,换用Prisma之后,跟数据库打交道的时间减少了三分之一以上,bug也跟着少了一堆。
如果你现在还在手写SQL或者用那些类型支持稀烂的ORM,真心建议花5分钟试一下。这玩意用了确实回不去。
项目地址:github.com/prisma/prisma
如果觉得有用,欢迎点个⭐️,也欢迎来Discord一起交流。
更新时间:2026-07-13
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号