🚀🚀🚀 Prisma 爱之初体验:一款非常棒的 ORM 工具库

前言

最近开发过程中接触到了 Prisma,所以今天就整理了下 Prisma 使用过程,希望可以帮助快速上手并应用到实际项目中。

往期精彩推荐

正文

安装与初始化

首先安装 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: 'alice@example.com',
    name: 'Alice',
  },
})

// 查询所有用户
const users = await prisma.user.findMany()

// 更新用户
await prisma.user.update({
  where: { email: 'alice@example.com' },
  data: { name: 'Alicia' },
})

// 删除用户
await prisma.user.delete({
  where: { email: 'alice@example.com' },
})

高级功能

关联查询

ts 复制代码
// 查询用户及其文章
const usersWithPosts = await prisma.user.findMany({
  include: { posts: true },
})

嵌套写入

ts 复制代码
await prisma.user.create({
  data: {
    email: 'bob@example.com',
    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 等架构深入使用。

今天的分享就这些了,感谢大家的阅读,如果文章中存在错误的地方欢迎指正!

往期精彩推荐

相关推荐
WeiXiao_Hyy1 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
吃杠碰小鸡2 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone2 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09012 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农2 小时前
Vue 2.3
前端·javascript·vue.js
夜郎king3 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
辰风沐阳3 小时前
JavaScript 的宏任务和微任务
javascript
夏幻灵4 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星4 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_4 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js