ORM para TypeScript: comparación de TypeORM, Prisma y MikroORM

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

ORM para TypeScript: comparación y ejemplos



En el desarrollo web moderno con TypeScript, elegir el ORM (Object-Relational Mapping) correcto es una de las decisiones clave que afecta la arquitectura, el rendimiento y la facilidad de mantenimiento del proyecto. Un ORM permite trabajar con la base de datos a través de objetos del lenguaje de programación, abstrayendo las consultas SQL. En este artículo, analizaremos los tres ORM más populares para TypeScript: TypeORM, Prisma y MikroORM. Conocerás sus fortalezas y debilidades, y también verás ejemplos de código para cada uno.



1. TypeORM



TypeORM es uno de los ORM más antiguos y maduros para TypeScript y JavaScript. Soporta los patrones Active Record y Data Mapper, así como múltiples bases de datos: PostgreSQL, MySQL, SQLite, MongoDB y otras.



Características de TypeORM:

  • Soporte para decoradores en la definición de entidades
  • Relaciones flexibles: OneToOne, OneToMany, ManyToMany
  • Migraciones y sincronización de esquemas
  • Soporte para suscripciones y eventos del ciclo de vida
  • Query Builder para consultas complejas


Ejemplo de código con TypeORM:

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, createConnection } from "typeorm";

@Entity()export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column() email: string;}

async function main() { await createConnection({ type: "postgres", host: "localhost", port: 5432, username: "test", password: "test", database: "test", entities: [User], synchronize: true, });

const user = new User(); user.name = "Iván"; user.email = "ivan@example.com"; await user.save();

const users = await User.find(); console.log(users);}


Ventajas: gran comunidad, muchos tutoriales, soporte para MongoDB. Desventajas: configuración compleja, problemas con lazy loading, API a veces poco intuitiva.



2. Prisma



Prisma es un ORM moderno que replantea el enfoque para trabajar con bases de datos. En lugar de un ORM tradicional, ofrece tres componentes: Prisma Client (cliente tipado seguro generado automáticamente), Prisma Migrate (sistema de migraciones) y Prisma Studio (interfaz gráfica).



Características de Prisma:

  • Esquema de datos declarativo (schema.prisma)
  • Tipado completo basado en el esquema: sin tipos manuales
  • Generación automática del cliente
  • Soporte para transacciones y paginación
  • Integración con GraphQL (Nexus, TypeGraphQL)


Ejemplo de código con Prisma:

// schema.prismamodel User {  id    Int     @id @default(autoincrement())  name  String  email String  @unique  posts Post[]}

model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}

// main.tsimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() { const user = await prisma.user.create({ data: { name: 'María', email: 'maria@example.com', posts: { create: { title: 'Mi primer post' } } }, include: { posts: true } });

const users = await prisma.user.findMany({ include: { posts: true } }); console.log(users);}

main() .catch(e => console.error(e)) .finally(() => prisma.$disconnect());


Ventajas: la mejor tipificación de su clase, sintaxis simple, documentación excelente. Desventajas: dependencia del esquema, complejidad con consultas personalizadas, mayor consumo de memoria.



3. MikroORM



MikroORM es un micro-ORM inspirado en Doctrine

Recommendations