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更多功能点
相关推荐
子兮曰13 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰13 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝13 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码13 小时前
别再前后端各写一套表单校验了
java·后端
三十而立洋14 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
大勇前进14 小时前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu14 小时前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile14 小时前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白8014 小时前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
卡布鲁14 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js