prisma 是什么
Prisma是一个开源的数据库工具链项目,帮助开发人员更快地构建应用程序并减少错误,支持PostgreSQL、MySQL、MongoDB、SQL Server和SQLite。感兴趣的可以去这里查看=》中文网站
Prisma 主要是用作连接数据库的并支持TS 的自动补全
在项目中使用主要有三个步骤
安装
npm install prisma
初始化
npx prisma init
初始化会生成 prisma 文件夹与schema.prisma,DATABASE_URL在本地.env.local里面配置你的mysql数据库链接地址
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL") //DATABASE_URL="mysql://root:root@localhost:5432/mydb?schema=public"
}
定义你的数据库表名与字段名称
定义的详情可以看文档
这里简单定义一个Post 与Comment这里一个Post 对应多个Comment
model Post {
id String @id @default(cuid())
title String
content String? @db.LongText
publisted Boolean @default(false)
comments Comment[]
@@map(name:"posts")
}
model Comment{
id String @id @default(cuid())
content String
publisted Boolean @default(false)
postId String?
post Post? @relation(fields: [postId],references: [id])
}
安装prisma/client
npm install @prisma/client
在nextjs 根目录新建lib文件夹 db.ts
import { PrismaClient } from "@prisma/client"
declare global {
// eslint-disable-next-line no-var
var cachedPrisma: PrismaClient
}
let prisma: PrismaClient
if (process.env.NODE_ENV === "production") {
prisma = new PrismaClient()
} else {
if (!global.cachedPrisma) {
global.cachedPrisma = new PrismaClient()
}
prisma = global.cachedPrisma
}
export const db = prisma
在pages/api文件夹下新建
- /post/index.ts
- /comment/index.ts
post 接口
新增
const {content,title} = req.body
const reslut = db.post.create({
data:{
content:content,
title:title
}
})
if(reslut){
res.status(200).json({
message:"添加成功",
data:reslut
})
}
查询
const {title} = req.body
const reslut = db.post.findFrist({
where:{
title:title
}
})
if(reslut){
res.status(200).json({
message:"查询成功",
data:reslut
})
}
删除
const {title} = req.body
const reslut = db.post.delete({
where:{
title:title
}
})
if(reslut){
res.status(200).json({
message:"删除成功",
data:reslut
})
}
更新
const {id,title,content} = req.body
const reslut = db.post.delete({
where:{
id:id
},
data:{
title:title,
content:content,
}
})
if(reslut){
res.status(200).json({
message:"更新成功",
data:reslut
})
}
完整文件
import db from '@/lib/prisma'
import { NextApiRequest,NextApiResponse } from "next";
export default async function handler(req:NextApiRequest,res:NextApiResponse){
const {method} = req
if(method==="POST"){
const {content,title} = req.body
const reslut = db.post.create({
data:{
content:content,
title:title
}
})
if(reslut){
res.status(200).json({
message:"添加成功",
data:reslut
})
}
}else if(method==='GET'){
const {title} = req.body
const reslut = db.post.findFrist({
where:{
title:title
}
})
if(reslut){
res.status(200).json({
message:"查询成功",
data:reslut
})
}
}else if(method==='DELETE'){
const {title} = req.body
const reslut = db.post.delete({
where:{
title:title
}
})
if(reslut){
res.status(200).json({
message:"删除成功",
data:reslut
})
}
}else if(method==='PUT'){
const {id,title,content} = req.body
const reslut = db.post.delete({
where:{
id:id
},
data:{
title:title,
content:content,
}
})
if(reslut){
res.status(200).json({
message:"更新成功",
data:reslut
})
}
}
}