Pular para o conteúdo
Tecnologia

ORM abstrai SQL, aumenta produtividade mas esconde performance. Query Builder é SQL-like, controle total. Entenda trade-offs.

Conceitos Principais

ORM

Object-Relational Mapping. Entities → classes. Queries → métodos. Magic: migrations, relations. Exemplos: Prisma, TypeORM, Sequelize.

Query Builder

Programatic SQL. Knex, Kysely. Type-safe. Sem abstração excessiva. Mais controle.

N+1 Problem

ORMs lazy-load relations. Loop de N queries. Solução: eager loading. Query builders não têm problema.

Migrations

ORMs: auto-generate. Query builders: manual. Trade-off: magic vs controle.

Passo a Passo

  1. ORM Example (Prisma): const users = await prisma.user.findMany({ where: { active: true }, include: { posts: true }}). Type-safe, auto-complete.
  2. Query Builder (Knex): const users = await knex("users").where({ active: true }).join("posts", "users.id", "posts.user_id").select("*"). More verbose, SQL-like.
  3. Performance Test: ORM N+1: 1 + N queries. Eager: 2 queries (JOIN). Query builder: 1 query sempre. Measure com EXPLAIN.
  4. Complex Query: ORM: queryRaw ou query builder. Query Builder: natural. Subqueries, CTEs mais fáceis.
  5. Decisão: ORM: startups, CRUD-heavy, time-to-market. Query Builder: performance crítica, complex queries, control.

Boas Praticas

Recomendacoes

• ORM para CRUD simples

• Query builder para complex queries

• Hybrid: ORM + raw queries

• Always measure performance

• Eager load relations em ORM

• Index como se SQL direto

Erros Comuns

Evite estes erros

• ORM para tudo (performance issues)

• Não identificar N+1

• Raw SQL em strings (injection risk)

• Ignorar EXPLAIN

• Não testar performance

Checklist

  • Tool escolhido
  • CRUD funcionando
  • N+1 prevenido
  • Performance testada
  • Complex queries resolvidas
  • Migrations configuradas