Prisma is an open-source next-generation ORM. It consists of the following parts: Prisma Client: Auto-generated and type-safe query builder
https://www.prisma.io
Install prisma/client
npm install @prisma/client
https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client
Generate Prisma Client with the following command:
npx prisma generate
Install prisma
npm install prisma --save-dev
https://www.prisma.io/docs/getting-started/quickstart
set up Prisma with the init command of the Prisma CLI:
npx prisma init --datasource-provider sqlite
to npx prisma init --datasource-provider mysql
Model data in the Prisma schema
prisma/schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
Run a migration to create your database tables with Prisma Migrate
npx prisma migrate dev --name init
.env
DATABASE_URL="mysql://root:root@localhost:8889/nextjsdb"
https://www.prisma.io/docs/orm/prisma-client/queries/crud
https://nextjs.org/docs/app/building-your-application/routing/route-handlers
Create Folder and Files
app\users\route.js
//app\users\route.js
import { NextResponse } from "next/server";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export async function POST(request) {
try {
const data = await request.json();
console.log(data);
const { name, email } = data
const newUser = await prisma.user.create({
data: {
name,
email
}
});
return NextResponse.json(newUser);
} catch (error) {
console.log("Error creating user:", error)
return NextResponse.error("Internal Server Error", 500)
}
}
export async function GET() {
try {
const users = await prisma.user.findMany();
return NextResponse.json(users);
} catch (error) {
console.error("Error fetching users:", error);
return NextResponse.error("Internal Server Error", 500);
}
}
app\users\[id]\route.js
//app\users\[id]\route.js
import { NextResponse } from "next/server";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export async function GET(request, { params }) {
const id = parseInt(params.id);
try {
const users = await prisma.user.findUnique({
where: {
id: id,
},
})
return NextResponse.json(users);
} catch (error) {
console.error("Error fetching users:", error);
return NextResponse.error("Internal Server Error", 500);
}
}
export async function PUT(request, { params }) {
try {
const data = await request.json();
console.log(data);
const { name, email } = data
const id = parseInt(params.id);
const updatedUser = await prisma.user.update({
where: { id },
data: {
name,
email
}
});
return NextResponse.json(updatedUser);
} catch (error) {
console.log("Error updating user:", error)
return NextResponse.error("Internal Server Error", 500)
}
}
export async function DELETE(request, { params }) {
try {
const id = parseInt(params.id);
const deleteUser = await prisma.user.delete({
where: { id }
});
return NextResponse.json(deleteUser);
} catch (error) {
console.error("error deleting user:", error);
return NextResponse.error("Internal server Error", 500);
}
}
run C:\nextjs>npm run dev 