Novidades do Prisma 6 - ORM TypeSafe Ainda Mais Evoluído

2025.12.12

Visão Geral do Prisma 6

Prisma 6 traz segurança de tipos para queries SQL raw através da introdução do Typed SQL. Além disso, inclui melhorias de performance de queries e novas funcionalidades do cliente.

Typed SQL

Fornece segurança de tipos completa para queries SQL raw.

// sql/getUserWithPosts.sql
-- @param {Int} $1:userId
SELECT
  u.id,
  u.name,
  u.email,
  json_agg(p.*) as posts
FROM users u
LEFT JOIN posts p ON p.author_id = u.id
WHERE u.id = $1
GROUP BY u.id;
// Função type-safe gerada
import { getUserWithPosts } from '@prisma/client/sql';

const result = await prisma.$queryRawTyped(
  getUserWithPosts(123)
);

// result é completamente tipado
console.log(result.name);  // string
console.log(result.posts); // Post[]

Melhorias de Performance

Otimização do Query Engine

Benchmark Prisma 5 vs Prisma 6:
- findMany simples: 15% mais rápido
- Queries com relações: 25% mais rápido
- Busca de grandes volumes: 30% mais rápido

Melhoria de Processamento em Lote

// Auto-batching
const users = await Promise.all([
  prisma.user.findUnique({ where: { id: 1 } }),
  prisma.user.findUnique({ where: { id: 2 } }),
  prisma.user.findUnique({ where: { id: 3 } }),
]);
// Internamente agrupado em uma única query

Novas Funcionalidades do Cliente

Excluir Campos com omit

// Excluir campo de senha
const user = await prisma.user.findUnique({
  where: { id: 1 },
  omit: {
    password: true
  }
});
// user.password não existe

relationLoadStrategy

// Estratégia explícita de carregamento de relações
const user = await prisma.user.findUnique({
  where: { id: 1 },
  include: {
    posts: true
  },
  relationLoadStrategy: 'join' // ou 'query'
});

Prisma Client Extensions Aprimorado

const prisma = new PrismaClient().$extends({
  model: {
    user: {
      // Método customizado
      async signUp(email: string, password: string) {
        const hashedPassword = await hash(password);
        return prisma.user.create({
          data: { email, password: hashedPassword }
        });
      }
    }
  },
  query: {
    $allModels: {
      // Hook aplicado a todos os modelos
      async $allOperations({ model, operation, args, query }) {
        const start = Date.now();
        const result = await query(args);
        console.log(`${model}.${operation}: ${Date.now() - start}ms`);
        return result;
      }
    }
  }
});

// Uso
await prisma.user.signUp('user@example.com', 'password123');

Melhorias de Migração

Migração Diferencial

# Verificar diferenças antes de migrar
prisma migrate diff \
  --from-schema-datamodel prisma/schema.prisma \
  --to-schema-datasource prisma/schema.prisma

# Executar migração
prisma migrate dev --name add_user_profile

Rollback de Migração

# Rollback da última migração
prisma migrate rollback

Prisma Accelerate

Pool de conexões e funcionalidade de cache no edge.

import { PrismaClient } from '@prisma/client/edge';
import { withAccelerate } from '@prisma/extension-accelerate';

const prisma = new PrismaClient().$extends(withAccelerate());

// Query com cache
const users = await prisma.user.findMany({
  cacheStrategy: {
    ttl: 60,
    swr: 120
  }
});

Guia de Migração

# Upgrade para Prisma 6
npm install prisma@latest @prisma/client@latest

# Regenerar cliente
npx prisma generate

Breaking Changes

MudançaSolução
Node.js 18 ou superior obrigatórioUpgrade do Node.js
Alguns valores padrão alteradosConfigurar explicitamente

Resumo

Prisma 6 evoluiu para um ORM ainda mais poderoso com segurança de tipos para SQL raw através do Typed SQL, melhorias de performance e novas funcionalidades do cliente. O Typed SQL é especialmente útil quando você precisa escrever queries complexas.

← Voltar para a lista