Nuevas características de Prisma 6 - El ORM TypeSafe evoluciona aún más

2025.12.12

Resumen de Prisma 6

Prisma 6 introduce Typed SQL, que aporta seguridad de tipos a las consultas SQL raw. También incluye mejoras en el rendimiento de consultas y nuevas funciones del cliente.

Typed SQL

Proporciona seguridad de tipos completa para consultas 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;
// Función generada con seguridad de tipos
import { getUserWithPosts } from '@prisma/client/sql';

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

// result tiene tipos completos
console.log(result.name);  // string
console.log(result.posts); // Post[]

Mejoras de rendimiento

Optimización del motor de consultas

Benchmark Prisma 5 vs Prisma 6:
- findMany simple: 15% más rápido
- Consultas con relaciones: 25% más rápido
- Obtención de grandes volúmenes de datos: 30% más rápido

Mejoras en procesamiento por lotes

// Batching automático
const users = await Promise.all([
  prisma.user.findUnique({ where: { id: 1 } }),
  prisma.user.findUnique({ where: { id: 2 } }),
  prisma.user.findUnique({ where: { id: 3 } }),
]);
// Se agrupa internamente en una sola consulta

Nuevas funciones del cliente

Exclusión de campos con omit

// Excluir el campo de contraseña
const user = await prisma.user.findUnique({
  where: { id: 1 },
  omit: {
    password: true
  }
});
// user.password no existe

relationLoadStrategy

// Estrategia explícita de carga de relaciones
const user = await prisma.user.findUnique({
  where: { id: 1 },
  include: {
    posts: true
  },
  relationLoadStrategy: 'join' // o 'query'
});

Prisma Client Extensions mejorado

const prisma = new PrismaClient().$extends({
  model: {
    user: {
      // Método personalizado
      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 los 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');

Mejoras en migraciones

Migración diferencial

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

# Ejecutar migración
prisma migrate dev --name add_user_profile

Rollback de migraciones

# Revertir la última migración
prisma migrate rollback

Prisma Accelerate

Funciones de connection pooling y caché en el edge.

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

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

// Consulta con caché
const users = await prisma.user.findMany({
  cacheStrategy: {
    ttl: 60,
    swr: 120
  }
});

Guía de migración

# Actualizar a Prisma 6
npm install prisma@latest @prisma/client@latest

# Regenerar el cliente
npx prisma generate

Cambios incompatibles

CambioSolución
Node.js 18 o superior requeridoActualizar Node.js
Algunos valores por defecto cambiadosConfigurar explícitamente

Resumen

Prisma 6 ha evolucionado hacia un ORM más potente con seguridad de tipos para SQL raw mediante Typed SQL, mejoras de rendimiento y nuevas funciones del cliente. Typed SQL es especialmente útil cuando necesitas escribir consultas complejas.

← Volver a la lista