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.

  1. 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;
  2. 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');
        }
    });
  3. 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?