Introdução ao Prisma ORM - Operações de Banco de Dados Type-Safe

Intermediário | 55 min leitura | 2024.12.22

O que você vai aprender neste tutorial

✓ Configuração do Prisma
✓ Definição de Schema
✓ Migrações
✓ Operações CRUD
✓ Relações
✓ Transações

Step 1: Configuração

npm init -y
npm install prisma @prisma/client
npm install -D typescript ts-node @types/node
npx prisma init

Step 2: Definição de Schema

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
  createdAt DateTime @default(now())
}

Step 3: Migrações

# Criar e executar migração
npx prisma migrate dev --name init

# Gerar Prisma Client
npx prisma generate

# Verificar banco de dados
npx prisma studio

Step 4: Operações CRUD

// src/index.ts
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  // Create
  const user = await prisma.user.create({
    data: {
      email: 'alice@example.com',
      name: 'Alice',
      posts: {
        create: { title: 'Meu primeiro post' }
      }
    },
    include: { posts: true }
  });

  // Read
  const users = await prisma.user.findMany({
    include: { posts: true }
  });

  // Update
  const updated = await prisma.user.update({
    where: { id: 1 },
    data: { name: 'Alice Updated' }
  });

  // Delete
  await prisma.post.delete({
    where: { id: 1 }
  });
}

main()
  .catch(console.error)
  .finally(() => prisma.$disconnect());

Step 5: Queries Avançadas

// Filtragem
const posts = await prisma.post.findMany({
  where: {
    OR: [
      { title: { contains: 'Prisma' } },
      { content: { contains: 'database' } }
    ],
    published: true
  },
  orderBy: { createdAt: 'desc' },
  take: 10,
  skip: 0
});

// Transações
const [user, post] = await prisma.$transaction([
  prisma.user.create({ data: { email: 'bob@example.com' } }),
  prisma.post.create({ data: { title: 'New Post', authorId: 1 } })
]);

Resumo

Prisma é um ORM type-safe que oferece uma experiência de desenvolvimento consistente, desde a definição de schema até as queries.

← Voltar para a lista