4
respostas

Qual a vantagem do Query builder?

No texto diz que tanto o ORM quanto o Query builder permitem "o uso de raw queries, em que é possível adicionar consultas em SQL ao código para resolver casos mais específicos sem perder o restante das funcionalidades e vantagens das ferramentas.", então qual seria a vantagem de usar o Query builder já que o ORM também permite escrever querys mais complexas?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
4 respostas

Olá Luidi! Como vai?

A sua dúvida é bastante pertinente! Tanto os ORMs quanto os Query Builders têm suas próprias vantagens e desvantagens, e a escolha entre eles depende muito das necessidades específicas do seu projeto.

Os ORMs, como o Sequelize, são ótimos para quem busca facilidade de uso e abstração. Eles mapeiam tabelas do banco de dados para classes e fornecem métodos prontos para manipular os dados, o que pode acelerar o desenvolvimento e facilitar a manutenção do código. Isso é especialmente útil se você ou sua equipe não têm um conhecimento profundo de SQL, já que o ORM faz grande parte do trabalho pesado por você.

Por outro lado, os Query Builders, como o Knex, oferecem um nível de controle maior sobre as consultas SQL que estão sendo geradas. Isso pode ser uma vantagem significativa em situações onde a performance é crítica ou quando você precisa de consultas SQL muito específicas e complexas. Com um Query Builder, você pode escrever consultas que são mais próximas da sintaxe SQL original, o que pode ser mais eficiente e flexível em alguns casos.

Um exemplo prático seria uma aplicação que precisa de otimizações de performance muito específicas. Com um Query Builder, você pode ajustar as consultas exatamente como precisa, enquanto com um ORM, você pode ficar limitado pelas abstrações que ele fornece.

Em resumo, se o seu projeto requer consultas SQL complexas e você precisa de um controle fino sobre o SQL gerado, um Query Builder pode ser a melhor escolha. Se a facilidade de uso e a abstração são mais importantes para você, um ORM pode ser mais adequado.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Mas o ORM como o sequelize não permite fazer consultas SQL complexas por meio do uso de raw queries? Isso não tiraria a vantagem do Query Builder?

Oi, Luidi!

Sobre sua última dúvida, a vantagem do Query Builder mesmo permitindo raw queries no ORM está na forma como ele constrói as consultas e no controle que oferece sobre o SQL gerado. Quando você usa um ORM como o Sequelize e recorre a raw queries, você sai da abstração que o ORM oferece — ou seja, perde parte dos benefícios como segurança contra SQL injection, consistência no mapeamento dos dados e portabilidade entre bancos.

Já com um Query Builder, você continua escrevendo consultas personalizadas, mas mantém a estrutura programática de construção das queries (sem precisar concatenar strings SQL manualmente). Isso permite:

  • Montar consultas complexas de forma dinâmica e segura;
  • Aproveitar recursos como chaining (encadeamento de métodos);
  • Garantir que a query final seja gerada conforme o banco de dados alvo.

Veja este exemplo usando Knex (Query Builder):


const knex = require('knex')({ client: 'sqlite3', connection: { filename: './meu_banco.sqlite' } });

const resultado = await knex('alunos')
  .select('nome', 'idade')
  .where('curso', 'Node.js')
  .andWhere('idade', '>', 18)
  .orderBy('nome', 'asc');

Perceba que não escrevemos SQL diretamente, mas o Knex gera uma query otimizada e segura para o banco.
Com o Sequelize, se fosse necessário algo fora do padrão dele, seria preciso usar sequelize.query('SELECT ...'), o que bypassa parte das validações e perde o controle de abstração.

Em resumo: o Query Builder oferece controle e flexibilidade sem abrir mão da segurança e estrutura do código, enquanto o ORM foca em abstração e produtividade, mas pode ser mais limitado quando há necessidade de queries complexas.

Fico à disposição!

1)Mas podemos usar "raw queries" às vezes? Se sim, quando e quais cuidados devemos ter e ajustes a fazer?
2)Se um projeto começa simples e por isso usa ORM, mas a medida que cresce precisa de muitas "queries mais complexas", o projeto deveria refatorar todo o código trocando o ORM por Query Builder ou encher de "raw queries"?