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ça | Solução |
|---|---|
| Node.js 18 ou superior obrigatório | Upgrade do Node.js |
| Alguns valores padrão alterados | Configurar 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