什么是 prisma?
Prisma 是一个现代化的数据库东西套件,用于简化和改善应用程序与数据库之间的交互。它供给了一个类型安全的查询构建器和一个强壮的 ORM(对象联系映射)层,使开发人员能够以声明性的办法操作数据库。
Prisma 支持多种主流数据库,包含 PostgreSQL、MySQL 和 SQLite,它通过生成规范的数据库模型来与这些数据库进行交互。运用 Prisma,开发人员可以定义数据库模型并生成类型安全的查询构建器,这些构建器供给了一套直观的办法来创立、更新、删去和查询数据库中的数据。
Prisma 的主要特点包含:
- 类型安全的查询构建器:Prisma 运用强类型语言(如 TypeScript)生成查询构建器,然后供给了在编译时捕获过错和类型查看的能力。这有助于减少过错,并供给更好的开发人员体会。
- 强壮的 ORM 层:Prisma 供给了一个功用强壮的 ORM 层,使开发人员能够以面向对象的办法操作数据库。它主动生成了数据库模型的 CRUD(创立、读取、更新、删去)办法,简化了与数据库的交互。
- 数据库迁移:Prisma 供给了数据库迁移东西,可协助开发人员办理数据库形式的改变。它可以主动创立和应用迁移脚本,使数据库的演进进程愈加简单和可控。
- 功用优化:Prisma 运用先进的查询引擎和数据加载技术,以进步数据库拜访的功用。它支持高档查询功用,如相关查询和聚合查询,并主动优化查询以供给最佳的功用
装置运用
-
装置 Prisma CLI:
- 运用 npm 装置:运转
npm install -g prisma
。 - 运用 yarn 装置:运转
yarn global add prisma
。
- 运用 npm 装置:运转
-
初始化项目
- 运用
prisma init --datasource-provider mysql
- 运用
此时就会创立生成基本目录
-
衔接mysql
- 修正.env文件
[DATABASE_URL="mysql://账号:暗码@主机:端口/库名"]
- 比如
DATABASE_URL="mysql://root:123456@localhost:3306/xiaoman"
- 修正.env文件
创立表
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
实现增修改查
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}`)
})