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 PostgreSQLEjemplo 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 PostgreSQLEjemplo 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 initDefinició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