Prisma ORM: Trabalhando com Banco de Dados de Forma Moderna
Introdução
O Prisma é atualmente um dos ORMs mais populares do ecossistema Node.js. Ele oferece uma abordagem moderna para acesso a banco de dados, combinando produtividade, segurança de tipos e excelente experiência de desenvolvimento.
Diferente de ORMs tradicionais, o Prisma gera automaticamente tipos TypeScript com base na estrutura do banco de dados, reduzindo erros e aumentando a produtividade da equipe.
Neste artigo aprenderemos a configurar o Prisma do zero utilizando PostgreSQL.
O que é um ORM?
ORM significa:
Object Relational Mapping
Sua função é permitir que tabelas do banco de dados sejam manipuladas através de objetos e métodos da linguagem de programação.
Sem ORM:
SELECT * FROM users;Com Prisma:
const users = await prisma.user.findMany();Essa abstração torna o código mais legível e fácil de manter.
Criando o Projeto
Inicialize um projeto Node.js:
npm init -yInstale o TypeScript:
npm install typescript tsx -DCrie o arquivo de configuração:
npx tsc --initInstalando o Prisma
Instale as dependências necessárias:
npm install prismanpm install @prisma/clientA primeira dependência contém as ferramentas de desenvolvimento.
A segunda será utilizada pela aplicação em tempo de execução.
Inicializando o Prisma
Execute:
npx prisma initO Prisma criará a estrutura:
prisma/
└── schema.prisma
.envConfigurando o Banco de Dados
No arquivo .env:
DATABASE_URL="postgresql://postgres:senha@localhost:5432/app"Substitua os valores conforme seu ambiente.
Entendendo o Schema
O arquivo principal do Prisma é:
prisma/schema.prismaExemplo:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}Criando a Primeira Tabela
Adicione o model:
model User {
id String @id @default(uuid())
name String
email String @unique
createdAt DateTime @default(now())
}Esse model representa a tabela de usuários.
Criando a Migration
Após definir os models:
npx prisma migrate dev --name create_usersO Prisma irá:
- Criar a migration.
- Atualizar o banco.
- Gerar os tipos TypeScript.
Gerando o Client
Caso necessário:
npx prisma generateEsse comando gera o Prisma Client utilizado pela aplicação.
Criando a Instância do Prisma
Crie:
src/lib/prisma.tsimport { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();Agora toda a aplicação poderá reutilizar essa conexão.
Inserindo Dados
Criar usuário:
const user = await prisma.user.create({
data: {
name: 'Weliton Sousa',
email: 'weliton@email.com',
},
});Resultado:
{
"id": "uuid",
"name": "Weliton Sousa",
"email": "weliton@email.com"
}Buscando Dados
Buscar todos:
const users = await prisma.user.findMany();Buscar apenas um:
const user = await prisma.user.findUnique({
where: {
email: 'weliton@email.com',
},
});Atualizando Registros
await prisma.user.update({
where: {
id: userId,
},
data: {
name: 'Novo Nome',
},
});Removendo Registros
await prisma.user.delete({
where: {
id: userId,
},
});Relacionamentos
Um usuário possui vários posts:
model User {
id String @id @default(uuid())
name String
posts Post[]
}
model Post {
id String @id @default(uuid())
title String
userId String
user User @relation(fields: [userId], references: [id])
}O Prisma gera automaticamente todos os tipos relacionados.
Consultas com Relacionamentos
const users = await prisma.user.findMany({
include: {
posts: true,
},
});Resultado:
[
{
"id": "1",
"name": "Weliton",
"posts": [...]
}
]Boas Práticas
Utilize migrations
Nunca altere tabelas manualmente em produção.
Sempre utilize:
npx prisma migrate devCentralize a instância
Utilize apenas um Prisma Client para toda aplicação.
Evite consultas desnecessárias
Utilize:
selectquando precisar de poucos campos.
Exemplo:
const users = await prisma.user.findMany({
select: {
id: true,
name: true,
},
});Quando Utilizar Prisma?
O Prisma é excelente para:
- APIs REST
- Aplicações SaaS
- Backends em Node.js
- Sistemas corporativos
- Projetos TypeScript
Principalmente quando produtividade e segurança de tipos são prioridades.
Conclusão
O Prisma transformou a forma como aplicações Node.js interagem com bancos de dados relacionais. Sua integração com TypeScript, sistema de migrations e geração automática de tipos tornam o desenvolvimento muito mais produtivo e seguro.
Para novos projetos Node.js, Prisma é atualmente uma das melhores opções disponíveis para acesso a dados, oferecendo uma excelente combinação entre simplicidade, performance e manutenibilidade.