ORM e Prisma
Alternativa para Programar em SQL: ORM e Prisma
Em alguns momentos, trabalhar diretamente com SQL pode ser trabalhoso e propenso a erros. Como alternativa, podemos utilizar um ORM (Object Relational Mapping), que converte modelos em comandos SQL de forma automática, facilitando a interação com o banco de dados.
O que é um ORM?
Um ORM é uma ferramenta que simplifica a interação com o banco de dados, permitindo que você escreva código em uma linguagem de programação de alto nível sem se preocupar diretamente com comandos SQL. Ele mapeia classes e objetos da sua aplicação para tabelas e registros no banco de dados, abstraindo as operações de CRUD (Create, Read, Update, Delete).
Prisma: Um ORM Moderno
O Prisma é um ORM moderno escrito em Rust que revolucionou o ecossistema Node.js. Sua biblioteca é simples de usar e altamente eficaz, oferecendo uma experiência de desenvolvimento robusta e produtiva.qwwq2
Passos para Utilizar o Prisma
1. Instalação do Prisma
Primeiramente, vamos instalar o Prisma no nosso projeto Node.js.
npm install @prisma/client
npm install prisma --save-dev
@prisma/client: É o cliente Prisma que nos permite interagir com o banco de dados.
prisma: É a ferramenta de linha de comando do Prisma utilizada para gerar o cliente e gerenciar o esquema.
2. Inicialização do Prisma
Após a instalação, inicialize o Prisma no projeto:
npx prisma init
Este comando criará uma pasta chamada prisma
na raiz do projeto, contendo o arquivo schema.prisma
e um arquivo .env
para configurar as variáveis de ambiente.
3. Configuração do Banco de Dados
No arquivo .env
, configure a URL de conexão com o seu banco de dados PostgreSQL:
DATABASE_URL="postgresql://seu_usuario:sua_senha@localhost:5432/lojinha?schema=public"
Substitua seu_usuario
, sua_senha
e lojinha
pelas suas credenciais e nome do banco de dados.
4. Definição do Modelo no Prisma
No arquivo schema.prisma
, defina os modelos que correspondem às tabelas do seu banco de dados. Adapte o modelo SQL para o Prisma conforme abaixo:
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Usuario {
id Int @id @default(autoincrement())
nome String
cpf String
telefone String
compras Compra[]
}
model Produto {
id Int @id @default(autoincrement())
nome String
quantidade Int
preco Float
compras Compra[]
}
model Compra {
id Int @id @default(autoincrement())
idUsuario Int
idProduto Int
quantidade Int
data DateTime
valor Float
usuario Usuario @relation(fields: [idUsuario], references: [id])
produto Produto @relation(fields: [idProduto], references: [id])
}
5. Geração do Cliente Prisma
Após definir os modelos, gere o cliente Prisma:
npx prisma generate
Este comando cria o cliente Prisma que será utilizado para interagir com o banco de dados no seu código Node.js.
6. Migrações do Banco de Dados
Para aplicar as mudanças no banco de dados, utilize o comando de migração:
npx prisma migrate dev --name init
Este comando criará as tabelas no banco de dados conforme definido no schema.prisma
.
7. Integração do Prisma no Projeto Node.js
Agora, vamos integrar o Prisma ao nosso projeto existente.
Importar o Cliente Prisma:
Crie um arquivo
prismaClient.js
na raiz do projeto para configurar o cliente Prisma.// prismaClient.js const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); module.exports = prisma;
Utilizar o Prisma nas Rotas:
Atualize suas rotas para utilizar o Prisma em vez de comandos SQL diretos.
Exemplo: Rota para Obter Todos os Produtos
// routes/produtos.js const express = require('express'); const router = express.Router(); const prisma = require('../prismaClient'); // Rota para obter todos os produtos router.get('/', async (req, res) => { try { const produtos = await prisma.produto.findMany(); res.json(produtos); } catch (error) { console.error(error); res.status(500).send('Erro no servidor'); } }); module.exports = router;
Exemplo: Rota para Adicionar um Novo Produto
// routes/produtos.js // Rota para adicionar um novo produto router.post('/', async (req, res) => { const { nome, quantidade, preco } = req.body; try { const novoProduto = await prisma.produto.create({ data: { nome, quantidade, preco, }, }); res.json(novoProduto); } catch (error) { console.error(error); res.status(500).send('Erro no servidor'); } });
Atualizar o Servidor para Utilizar as Rotas com Prisma:
// index.js const express = require('express'); const app = express(); const port = 3000; const produtosRouter = require('./routes/produtos'); app.use(express.json()); app.use('/produtos', produtosRouter); app.listen(port, () => { console.log(`Servidor rodando em http://localhost:${port}`); });
Recursos Adicionais
Documentação do Prisma: Prisma Docs
Prisma Studio: Ferramenta visual para explorar e manipular dados no banco de dados. Pode ser iniciada com:
npx prisma studio
Considerações Finais
Facilidade vs. Flexibilidade: Embora um ORM facilite o desenvolvimento ao abstrair comandos SQL, é importante avaliar se ele atende às necessidades específicas do projeto.
Performance: ORMs podem introduzir overhead, portanto, avalie o impacto na performance conforme a complexidade da aplicação. Para a maioria dos projetos, os benefícios de produtividade superam os pequenos impactos de performance.
Last updated
Was this helpful?