什么是 prisma?

Prisma 是一个现代化的数据库东西套件,用于简化和改善应用程序与数据库之间的交互。它供给了一个类型安全的查询构建器和一个强壮的 ORM(对象联系映射)层,使开发人员能够以声明性的办法操作数据库。

Prisma 支持多种主流数据库,包含 PostgreSQL、MySQL 和 SQLite,它通过生成规范的数据库模型来与这些数据库进行交互。运用 Prisma,开发人员可以定义数据库模型并生成类型安全的查询构建器,这些构建器供给了一套直观的办法来创立、更新、删去和查询数据库中的数据。

Prisma 的主要特点包含:

  1. 类型安全的查询构建器:Prisma 运用强类型语言(如 TypeScript)生成查询构建器,然后供给了在编译时捕获过错和类型查看的能力。这有助于减少过错,并供给更好的开发人员体会。
  2. 强壮的 ORM 层:Prisma 供给了一个功用强壮的 ORM 层,使开发人员能够以面向对象的办法操作数据库。它主动生成了数据库模型的 CRUD(创立、读取、更新、删去)办法,简化了与数据库的交互。
  3. 数据库迁移:Prisma 供给了数据库迁移东西,可协助开发人员办理数据库形式的改变。它可以主动创立和应用迁移脚本,使数据库的演进进程愈加简单和可控。
  4. 功用优化:Prisma 运用先进的查询引擎和数据加载技术,以进步数据库拜访的功用。它支持高档查询功用,如相关查询和聚合查询,并主动优化查询以供给最佳的功用

装置运用

  1. 装置 Prisma CLI:

    • 运用 npm 装置:运转npm install -g prisma
    • 运用 yarn 装置:运转yarn global add prisma
  2. 初始化项目

    • 运用prisma init --datasource-provider mysql

此时就会创立生成基本目录

Nodejs 第四十章(prisma)

  1. 衔接mysql

    • 修正.env文件 [DATABASE_URL="mysql://账号:暗码@主机:端口/库名"]
    • 比如 DATABASE_URL="mysql://root:123456@localhost:3306/xiaoman"

创立表

prisma/schema.prisma

model Post {
  id       Int     @id @default(autoincrement()) //id 整数 自增
  title    String  //title字符串类型
  publish  Boolean @default(false) //发布 布尔值默许false
  author   User   @relation(fields: [authorId], references: [id]) //作者 相关用户表 相相关系 authorId 相关user表的id
  authorId Int
}
model User {
  id    Int    @id @default(autoincrement())
  name  String
  email String @unique
  posts Post[]
}

执行命令 创立表

prisma migrate dev

Nodejs 第四十章(prisma)

实现增修改查

import express from 'express'
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const app = express()
const port: number = 3000
app.use(express.json())
//相关查找
app.get('/', async (req, res) => {
    const data = await prisma.user.findMany({
        include: {
            posts: true
        }
    })
    res.send(data)
})
//单个查找
app.get('/user/:id', async (req, res) => {
   const row =  await prisma.user.findMany({
        where: {
            id: Number(req.params.id)
        }
    })
    res.send(row)
})
//新增
app.post('/create', async (req, res) => {
    const { name, email } = req.body
    const data = await prisma.user.create({
        data: {
            name,
            email,
            posts: {
                create: {
                    title: '标题',
                    publish: true
                },
            }
        }
    })
    res.send(data)
})
//更新
app.post('/update', async (req, res) => {
    const { id, name, email } = req.body
    const data = await prisma.user.update({
        where: {
            id: Number(id)
        },
        data: {
            name,
            email
        }
    })
    res.send(data)
})
//删去
app.post('/delete', async (req, res) => {
    const { id } = req.body
    await prisma.post.deleteMany({
        where: {
            authorId: Number(id)
        }
    })
    const data = await prisma.user.delete({
        where: {
            id: Number(id),
        },
    })
    res.send(data)
})
app.listen(port, () => {
    console.log(`App listening on port ${port}`)
})