Prisma para TypeScript: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao Prisma: ORM moderno para TypeScript

\n\n

Prisma é um ORM (Object-Relational Mapping) moderno para TypeScript e Node.js, que muda radicalmente a abordagem de trabalho com bancos de dados. Ao contrário de ORMs tradicionais, como Sequelize ou TypeORM, o Prisma oferece um modelo de dados declarativo, geração automática de tipos e uma API intuitiva. A biblioteca suporta PostgreSQL, MySQL, SQLite, SQL Server, MongoDB e CockroachDB.

\n\n

O principal objetivo do Prisma é tornar o trabalho com bancos de dados seguro, produtivo e conveniente. Graças à integração com TypeScript, você obtém autocompletar e verificação de tipos em tempo de compilação, o que reduz significativamente o número de erros em tempo de execução. O Prisma consiste em três componentes principais:

\n\n
    \n
  • Prisma Client — cliente gerado automaticamente para trabalhar com o banco de dados
  • \n
  • Prisma Migrate — sistema de gerenciamento de migrações
  • \n
  • Prisma Studio — GUI para visualizar e editar dados
  • \n
\n\n

Instalação do Prisma

\n\n

A instalação do Prisma em um projeto TypeScript é feita via npm. Primeiro, crie um novo projeto:

\n\n
mkdir my-prisma-project\ncd my-prisma-project\nnpm init -y
\n\n

Instale o Prisma CLI e o Prisma Client:

\n\n
npm install prisma @prisma/client --save
\n\n

Inicialize o Prisma no projeto:

\n\n
npx prisma init
\n\n

Este comando criará o diretório prisma com o arquivo schema.prisma e o arquivo .env para variáveis de ambiente.

\n\n

Início rápido: exemplo de código

\n\n

Vamos criar uma aplicação simples para gerenciar usuários. Primeiro, defina o modelo em prisma/schema.prisma:

\n\n
generator client {\n  provider = "prisma-client-js"\n}\n\ndatasource db {\n  provider = "sqlite"\n  url      = env("DATABASE_URL")\n}\n\nmodel User {\n  id        Int      @id @default(autoincrement())\n  email     String   @unique\n  name      String?\n  posts     Post[]\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\nmodel Post {\n  id        Int      @id @default(autoincrement())\n  title     String\n  content   String?\n  published Boolean  @default(false)\n  author    User     @relation(fields: [authorId], references: [id])\n  authorId  Int\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}
\n\n

Execute a migração para criar as tabelas no SQLite:

\n\n
npx prisma migrate dev --name init
\n\n

Agora, crie o arquivo index.ts com um exemplo de uso:

\n\n
import { PrismaClient } from '@prisma/client'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // Criando um usuário\n  const user = await prisma.user.create({\n    data: {\n      email: 'alice@example.com',\n      name: 'Alice',\n      posts: {\n        create: { title: 'Hello World' }\n      }\n    }\n  })\n  console.log('Created user:', user)\n\n  // Obtendo todos os usuários com seus posts\n  const users = await prisma.user.findMany({\n    include: { posts: true }\n  })\n  console.log('All users:', JSON.stringify(users, null, 2))\n}\n\nmain()\n  .catch(e => console.error(e))\n  .finally(async () => await prisma.$disconnect())
\n\n

Execute o código:

\n\n
npx ts-node index.ts
\n\n

Principais métodos do Prisma Client

\n\n

1. findUnique

\n

O que faz: Encontra um único registro por um identificador único (id, email, etc.).

\n

Parâmetros:

\n
    \n
  • where — objeto com condições de busca (obrigatório)
  • \n
  • include — (opcional) para incluir modelos relacionados
  • \n
  • select — (opcional) para selecionar campos específicos
  • \n
\n

Exemplo:

\n
const user = await prisma.user.findUni                    

Recommendations