Prisma ORM
Prisma is a modern ORM that makes database work much easier.
Installation
bash
npm install prisma @prisma/clientnpx prisma initConnection Configuration
env
# .envDATABASE_URL="postgresql://postgres:postgres@localhost:5432/ecommerce"Defining Schema
prisma
// prisma/schema.prismagenerator client { provider = "prisma-client-js"} datasource db { provider = "postgresql" url = env("DATABASE_URL")} model User { id String @id @default(uuid()) email String @unique name String password String role Role @default(USER) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt} enum Role { USER ADMIN} model Product { id String @id @default(uuid()) name String slug String @unique description String? price Decimal @db.Decimal(10, 2) stock Int @default(0) category Category @relation(fields: [categoryId], references: [id]) categoryId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt} model Category { id String @id @default(uuid()) name String @unique slug String @unique products Product[]}Running Migrations
bash
# Create migrationnpx prisma migrate dev --name init # Generate clientnpx prisma generate # View database (GUI)npx prisma studioPrisma Client Setup
typescript
// src/config/database.tsimport { PrismaClient } from '@prisma/client'; export const prisma = new PrismaClient({ log: ['query', 'error', 'warn'],});Basic Queries
typescript
// Createconst user = await prisma.user.create({ data: { email: 'john@email.com', name: 'John', password: 'hash' }}); // Find manyconst users = await prisma.user.findMany(); // Find uniqueconst user = await prisma.user.findUnique({ where: { email: 'john@email.com' }}); // Updateconst updated = await prisma.user.update({ where: { id: '123' }, data: { name: 'John Doe' }}); // Deleteawait prisma.user.delete({ where: { id: '123' } });Queries with Relations
typescript
// Include relationsconst product = await prisma.product.findUnique({ where: { id: '123' }, include: { category: true }}); // Select specific fieldsconst products = await prisma.product.findMany({ select: { id: true, name: true, price: true }});Summary
- ✅ Prisma configured with PostgreSQL
- ✅ Schema defined with models
- ✅ Migrations created
- ✅ Basic CRUD queries
Next lesson: Complete CRUD! 🚀