ORM para TypeScript: Comparación de Prisma, TypeORM y Drizzle — ejemplos de código

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 (Mapeo Objeto-Relacional) correcto puede acelerar significativamente el desarrollo y aumentar la confiabilidad de la aplicación. Un ORM permite trabajar con bases de datos a través de un enfoque orientado a objetos, evitando escribir consultas SQL en bruto. En este artículo, compararemos los tres ORM más populares para TypeScript: Prisma, TypeORM y Drizzle, y también veremos ejemplos de su uso.



1. Prisma — el estándar moderno



Prisma es un ORM de nueva generación que se centra en la comodidad del desarrollador y el rendimiento. Utiliza su propio lenguaje de descripción de esquemas (Prisma Schema) y genera un cliente completamente tipificado.



Características clave:

  • Generación automática de tipos TypeScript
  • API intuitiva para consultas
  • Migración de datos integrada (Prisma Migrate)
  • Soporte para PostgreSQL, MySQL, SQLite, MongoDB y otros


Ejemplo de código en TypeScript:

// 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])}

// Uso en códigoimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUsersWithPosts() { const users = await prisma.user.findMany({ include: { posts: true } }); return users;}


2. TypeORM — el clásico para TypeScript



TypeORM es un ORM maduro que admite tanto el patrón Active Record como Data Mapper. Está estrechamente integrado con TypeScript y utiliza decoradores para definir modelos.



Características clave:

  • Soporte para decoradores y clases
  • Dos enfoques: Active Record y Data Mapper
  • Migración avanzada y suscripciones a eventos
  • Soporte para múltiples SGBD


Ejemplo de código en TypeScript:

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

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

@Column() name: string;

@Column({ unique: true }) email: string;

@OneToMany(() => Post, post => post.user) posts: Post[];}

@Entity()export class Post { @PrimaryGeneratedColumn() id: number;

@Column() title: string;

@Column({ nullable: true }) content: string;

@ManyToOne(() => User, user => user.posts) user: User;}

// Usoasync function getUsersWithPosts() { const connection = await createConnection(); const userRepository = connection.getRepository(User); return await userRepository.find({ relations: ["posts"] });}


3. Drizzle — ligero y eficiente



Drizzle es un ORM relativamente nuevo que se enfoca en el rendimiento y el tamaño mínimo del bundle. Utiliza una sintaxis similar a SQL y no requiere generación de código.



Características clave:

  • Tamaño mínimo y alta velocidad
  • Soporte nativo de TypeScript sin decoradores
  • API similar a SQL (query builder)
  • Compatibilidad con bases de datos SQL


Ejemplo de código en TypeScript:

import { drizzle } from 'drizzle-orm/better-sqlite3';import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';import Database from 'better-sqlite3';

const sqlite = new Database('test.db');const db = drizzle(sqlite);

// Definición del esquemaconst users = sqliteTable('users', { id: integer('id').primaryKey(), name: text('na

Recommendations