ORM para JavaScript (Node.js): comparación de Sequelize, TypeORM, Prisma

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 JavaScript (Node.js): comparación y ejemplos



Al desarrollar aplicaciones de servidor en Node.js, la interacción con la base de datos es una de las tareas clave. El Mapeo Objeto-Relacional (ORM) permite trabajar con bases de datos relacionales a través de objetos de JavaScript, evitando tener que escribir SQL puro. En este artículo, analizaremos tres ORM populares: Sequelize, TypeORM y Prisma, compararemos sus características y proporcionaremos ejemplos prácticos.



1. Sequelize



Sequelize es uno de los ORM más antiguos y maduros para Node.js. Soporta PostgreSQL, MySQL, MariaDB, SQLite y MSSQL. Funciona con promesas y async/await.



Instalación y configuración

npm install sequelize sequelize-clinpm install pg pg-hstore # para PostgreSQL


Ejemplo de modelo y consultas

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('postgres://user:pass@localhost:5432/mydb');

// Definición del modeloconst User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

// Crear un registroconst user = await User.create({ name: 'Iván', email: 'ivan@example.com' });

// Búsqueda con filtroconst users = await User.findAll({ where: { name: 'Iván' } });

// Actualizaciónawait User.update({ email: 'new@example.com' }, { where: { id: 1 } });


Ventajas y desventajas

  • + Gran comunidad, mucha documentación
  • + Soporte para migraciones y seeds
  • - Sintaxis verbosa para consultas complejas
  • - Sin soporte nativo de TypeScript


2. TypeORM



TypeORM es un ORM orientado a TypeScript, pero también funciona con JavaScript estándar. Soporta decoradores, Active Record y Data Mapper. Funciona con la mayoría de los sistemas de bases de datos populares.



Instalación y configuración

npm install typeorm reflect-metadatanpm install pg # para PostgreSQL


Ejemplo de modelo con decoradores

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

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

@Column() name: string;

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

// Usoconst connection = await createConnection();const userRepo = connection.getRepository(User);const user = await userRepo.save({ name: 'Ana', email: 'anna@example.com' });const users = await userRepo.find({ where: { name: 'Ana' } });


Ventajas y desventajas

  • + Excelente soporte para TypeScript
  • + Dos enfoques: Active Record y Data Mapper
  • - Configuración compleja para principiantes
  • - Migraciones lentas en proyectos grandes


3. Prisma



Prisma es un ORM moderno que utiliza su propio lenguaje de esquema y genera un cliente con seguridad de tipos. Se considera el más eficiente y fácil de usar para los desarrolladores.



Instalación y configuración

npm install @prisma/clientnpx prisma init


Definición del esquema (schema.prisma)

model User {  id    Int     @id @default(autoincrement())  name  String  email String @unique}


Ejemplo de consultas

import { PrismaClient } from '@prisma/client';const prisma = new PrismaClient();

// Crearconst user = await prisma.user.create({ data: { name: 'Olga', email: 'olga@example.com' }});

// Búsquedaconst users = await prisma.user.findMany({ where: { name: 'Olga' } });

// Actualizaciónawait prisma.user.update({ where: { id: 1 }, data: { email: 'new@example.com' }});


Ventajas y desventajas

  • + Completa seguridad de tipos

Recommendations