Traditional Object-Relational Mappers (ORMs) often suffer from complex mapping boilerplate, inefficient generated SQL, and lack of type safety. Prisma revolutionized the Node.js ecosystem with an intuitive schema syntax, automated migrations, and zero-overhead generated queries.
npm install @prisma/client
npm install -D prisma
# Initialize Prisma configuration
npx prisma init --datasource-provider postgresql
prisma/schema.prismadatasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Student {
id Int @id @default(autoincrement())
email String @unique
fullName String
createdAt DateTime @default(now())
courses Enrollment[]
}
model Course {
id Int @id @default(autoincrement())
title String
credits Int @default(3)
enrollments Enrollment[]
}
model Enrollment {
id Int @id @default(autoincrement())
student Student @relation(fields: [studentId], references: [id])
studentId Int
course Course @relation(fields: [courseId], references: [id])
courseId Int
@@unique([studentId, courseId])
}
npx prisma migrate dev --name init_student_schema
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function runPrismaQueries() {
// 1. Create a student with nested course enrollment
const student = await prisma.student.create({
data: {
fullName: 'Vikram Seth',
email: 'vikram@university.edu',
courses: {
create: {
course: {
create: { title: 'Advanced Distributed Systems', credits: 4 }
}
}
}
},
include: {
courses: { include: { course: true } } // Auto-joins related data!
}
});
console.log('Created Student:', student);
// 2. Fetch students enrolled in a specific course
const enrolled = await prisma.student.findMany({
where: {
email: { endsWith: '@university.edu' }
},
select: {
id: true,
fullName: true,
email: true
}
});
console.log('Filtered Students:', enrolled);
}
runPrismaQueries();
Boost your server-side JavaScript proficiency by studying these closely connected core modules:
Prisma connects natively to PostgreSQL and MySQL.
Use Prisma Client directly inside Express controllers.
Compare Mongoose with Prisma's multi-database engine.