Prisma ORM 入门指南:从零开始的全栈技能学习之旅

📝 Prisma ORM 入门指南:从零开始的全栈技能学习之旅


一、🚀 概述 (Overview)

  • 引言与学习动机:

    • 这篇文章的目的是为了记录和分享学习 Prisma ORM 的入门过程。
    • 核心原因: 掌握一个全栈开发的新技能,以便能更高效、现代地进行后端和数据库开发。
  • 技术栈介绍:

    • 本次实战项目使用的主要技术栈:

      • 后端框架: Koa.js (轻量级 Node.js 框架)
      • ORM 技术: Prisma (现代数据库工具包)
    • 文章侧重点: 虽然使用了 Koa.js,但本文的重点 是帮助读者快速入门和理解 Prisma 的核心概念和用法


二、🛠️ 实战演练:Prisma 快速上手 (Hands-on Practice)

本章节将结合您的实际工程代码和命令,一步步引导读者。

2.1. 环境准备与项目初始化

  • 项目初始化命令:

    • npm init -y

    • npm install koa (安装 Koa)

    • 重点: 安装 Prisma 客户端和开发依赖:

      • npm install @prisma/client
      • npm install -D prisma (作为开发依赖安装 CLI)
  • Prisma 初始化:

    • 运行命令:npx prisma init

    • 说明该命令生成的文件:

      • prisma/schema.prisma (数据库模型定义文件)
      • .env (环境变量文件,用于存放数据库连接字符串)
ini 复制代码
DATABASE_URL="mysql://USER:PASSWORD@localhost:3306/DATABASE_NAME"  
  • 生成客户端
    • 运行命令:pnpm prisma generate

2.2. 定义数据模型 (Schema Definition)

kotlin 复制代码
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  id          Int      @id @default(autoincrement())
  name        String   
  email       String   @unique
  password    String
  createdTime DateTime @default(now()) @map("created_time")
  updatedTime DateTime @updatedAt @map("updated_time")
  @@map("user")
}

2.3. 数据库表新建

执行如下命令,实体就能推送到数据库中。

perl 复制代码
npx prisma db push

2.4 使用prisma进行增删改查

ini 复制代码
// ...existing code...
const Koa = require('koa')
const Router = require('@koa/router')
const bodyParser = require('koa-bodyparser')
const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()

const app = new Koa()

// 实例化路由器,并设置公共路由前缀 /users
const router = new Router({
  prefix: '/users'
})

app.use(bodyParser())

// 查询用户列表
router.get('/', async ctx => {
  const users = await prisma.user.findMany()
  ctx.body = users
})

// 查询单个用户
router.get('/:id', async ctx => {
  const id = parseInt(ctx.params.id)
  const user = await prisma.user.findUnique({
    where: { id }
  })
  ctx.body = user
})

// 创建用户
router.post('/', async ctx => {
  const user = ctx.request.body
  const newUser = await prisma.user.create({
    data: user
  })
  ctx.body = newUser
})

// 更新用户
router.patch('/:id', async ctx => {
  const id = parseInt(ctx.params.id)
  const updateUser = ctx.request.body
  const user = await prisma.user.update({
    where: {
      id
    },
    data: updateUser
  })
  ctx.body = user
})

// 删除用户
router.delete('/:id', async ctx => {
  const id = parseInt(ctx.params.id)
  const user = await prisma.user.delete({
    where: {
      id
    }
  })
  ctx.body = user
})

// 注册路由中间件
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000, () => {
  console.log('服务器运行在 3000 端口')
})
// ...existing code...

三、💡 总结与思考 (Conclusion and Reflection)

  • 本次遇到的主要问题:

  • 未来学习方向(引出下一篇):

    • Koa:
    • Prisma更多功能点
相关推荐
superman超哥6 分钟前
Rust String与&str的内部实现差异:所有权与借用的典型案例
开发语言·后端·rust·rust string·string与str·内部实现·所有权与借用
愈努力俞幸运30 分钟前
rust安装
开发语言·后端·rust
踏浪无痕35 分钟前
JobFlow 负载感知调度:把任务分给最闲的机器
后端·架构·开源
UrbanJazzerati37 分钟前
Python自动化统计工具实战:Python批量分析Salesforce DML操作与错误处理
后端·面试
Van_Moonlight41 分钟前
RN for OpenHarmony 实战 TodoList 项目:任务完成进度条
javascript·开源·harmonyos
我爱娃哈哈1 小时前
SpringBoot + Seata + Nacos:分布式事务落地实战,订单-库存一致性全解析
spring boot·分布式·后端
Van_Moonlight1 小时前
RN for OpenHarmony 实战 TodoList 项目:深色浅色主题切换
javascript·开源·harmonyos
小贵子的博客1 小时前
Ant Design Vue <a-table>
前端·javascript·vue.js·anti-design-vue
天天进步20151 小时前
【Nanobrowser源码分析4】交互篇: 从指令到动作:模拟点击、滚动与输入的底层实现
开发语言·javascript·ecmascript
nil1 小时前
记录protoc生成代码将optional改成omitepty问题
后端·go·protobuf