首页 / Prisma ORM 入门教程 / Prisma 8 / Prisma Next 前瞻

Prisma ORM 入门教程

Prisma 8 / Prisma Next 前瞻

本教程共 54 篇 · 第 54 篇 · 更新于 2026-08-11 · 约 5 分钟阅读

Prisma NextPrisma 8Early Access契约迁移图中间件SQL Query Builder

本节目标:认识下一代 Prisma(Prisma Next / v8)的核心设计,分清它与 v7 的边界,判断要不要尝鲜。

Warning

Prisma Next 当前版本为 8.0.0-rc.1(Release Candidate,2026-08-07 发布),尚未正式可用(GA),不要用于生产。生产项目请继续使用 v7(7.9.1)。本章内容来自 Early Access 文档,正式版可能调整。

Prisma Next 是对 Prisma ORM 的从头重写。它保留 schema-first 的建模方式和模型优先的查询体验,把底层换成全 TypeScript 实现。官方定位它是「Prisma 的未来」,也就是 v8 的预览形态。这一章当预告片看:知道方向,不急着上车。

契约先行(Contract-first)

v7 把 Schema(模式)编译成一大包生成代码;Prisma Next 把 Schema 编译成一份可读、可 diff 的契约(Contract):contract.json 描述模型与存储结构,contract.d.ts 是派生出的 TypeScript 类型。同一份源码永远产出字节级一致的结果,像数据世界的 lock 文件,工具和 AI 代理都能直接读。

npx prisma-next contract emit   # 生成 contract.json + contract.d.ts

运行前还有校验环节:数据库里存着契约哈希,执行查询前比对,库和代码不一致就拒绝执行,而不是等查询时炸掉。Schema 可以用 PSL 写,也能用 TypeScript 构建器写,两者产物完全相同。

组合式查询 DSL

查询从「一个 findMany 大对象」变成「链式小步组合」。.where(...) 可叠加,.all() 取全部,.first() 取一条:

// Prisma Next:组合式 DSL
const posts = await db.orm.public.Post
  .where({ published: true })
  .orderBy((p) => p.createdAt.desc())
  .take(20)
  .all();

// v7 对照:一个 findMany 对象
const posts = await prisma.post.findMany({
  where: { published: true },
  orderBy: { createdAt: "desc" },
  take: 20,
});

每条查询都编译成可检查的执行计划。大结果集支持流式读取:for await 一条条处理,内存占用恒定。DSL 表达不了的场景,还有底层逃生门——类型安全的 SQL query builder(select、innerJoin、groupBy);MongoDB 侧对应提供 pipeline builder。

迁移图(Migration Graph)

v7 的迁移是按时间戳排序的一条线,分支合并时容易打架。Prisma Next 把迁移建模成图:每个 Schema 状态是一个节点(用哈希标识),每条迁移是一条边(记录 from/to)。数据库沿图从当前节点走到目标节点,两个分支各自合并,不需要改文件名排序。

npx prisma-next migration status --graph   # 看迁移图拓扑
npx prisma-next migration status           # 看数据库当前在哪个节点
npx prisma-next migration apply --ref prod # 按命名引用应用迁移(引用本身用 migration ref set production <hash> 管理)

重要状态用 ref 命名(如 prod),ref 文件入库,代码评审里就能确认「生产应该在哪」。回滚也只是一条向后走的迁移。迁移本身用 TypeScript 编写,编译期对照契约校验。

内置中间件:hooks、缓存与护栏

Prisma Next 把「包在每条查询外」的能力做成中间件(middleware)。五个钩子按固定顺序执行:beforeCompile(改写查询)、beforeExecute(校验/拦截)、intercept(直接应答)、onRow(逐行观察)、afterExecute(收尾观测)。官方内置三个:

中间件作用
cache内存缓存,查询带 TTL 注解才启用
lints拦截危险查询形状(如 DELETE 不带 WHERE)
budgets行数与延迟预算,超限拦截或告警
middleware: [
  createCacheMiddleware({ maxEntries: 1_000 }),
  lints(),
  budgets({ maxRows: 10_000, maxLatencyMs: 1_000 }),
],

定位区别要分清:v7 的客户端扩展(Client Extensions)是「改造查询」的工具;Prisma Next 的中间件是「围绕查询的管道」。数据库能力(pgvector、PostGIS、全文搜索)则走扩展包:装包、在 config 注册、契约里直接用新类型。

快速开始与现状

体验 Prisma Next 只需一条命令:

npx create-prisma@next

脚手架会装好 Prisma Next skills(供 AI 编程助手使用)。CLI 叫 prisma-next:init、contract emit/infer、db init/verify/sign/schema/update、migration plan/apply/status/new/ref/show 等。数据库支持方面,EA 阶段一等支持 PostgreSQL 与 MongoDB,SQLite 与 MySQL 在路上。

Note

一个有趣的对照:v7 不支持 MongoDB(留 v6.19),而 Prisma Next 的 Early Access 反而把 MongoDB 列为一等支持对象。这属于 EA 状态,验证后再信。

要不要现在学

建议分两步走。生产项目:继续用 v7,等 v8 正式可用(GA)再规划迁移。想尝鲜:用 create-prisma@next 单独开项目,重点感受契约产物、组合式 DSL 和迁移图三个方向——它们大概率是 v8 的骨架。记住:rc 版本一切皆可改,别拿生产数据做实验。

参考来源

  • Prisma 官方文档:Prisma Next 概览(orm/next/index.mdx、next/index.mdx)
  • Prisma 官方文档:The data contract / Reading data / The migration graph / How middleware works / SQL query builder(orm/next/**)
  • Prisma 官方文档:Prisma Next CLI(cli/next/index.mdx)
  • 版本基线说明:_version.md(8.0.0-rc.1,2026-08-07)
上一篇
常见坑与排障速查
下一篇
已经是最后一篇啦