ORM para JavaScript (Node.js): comparação entre Sequelize, TypeORM, Prisma

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

ORM para JavaScript (Node.js): comparação e exemplos



No desenvolvimento do lado servidor com Node.js, mais cedo ou mais tarde surge a questão da interação com o banco de dados. Escrever consultas SQL puras é uma tarefa trabalhosa e sujeita a erros. Para ajudar, existem os ORMs (Object-Relational Mapping) — bibliotecas que permitem trabalhar com tabelas de banco de dados como se fossem objetos JavaScript comuns. Neste artigo, compararemos os três ORMs mais populares para Node.js: Sequelize, TypeORM e Prisma, e apresentaremos exemplos de código ilustrativos.



1. Sequelize

Sequelize é um dos ORMs mais antigos e maduros para Node.js. Ele suporta PostgreSQL, MySQL, MariaDB, SQLite e Microsoft SQL Server. O Sequelize usa uma abordagem clássica com modelos e promessas (ou async/await).



Instalação

npm install sequelize pg pg-hstore


Exemplo: definição de modelo e consulta

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('database', 'user', 'password', {  host: 'localhost',  dialect: 'postgres'});

const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

async function createUser() { await sequelize.sync(); const user = await User.create({ name: 'Ivan', email: 'ivan@example.com' }); console.log(user.toJSON());}createUser();


Características do Sequelize

  • Maturidade e grande comunidade.
  • Suporte a transações, migrações e dados de seed.
  • Sistema flexível de associações (hasOne, hasMany, belongsToMany).
  • Desvantagem: sintaxe por vezes verbosa e depuração complexa.


2. TypeORM

TypeORM é um ORM que pode funcionar tanto com JavaScript quanto com TypeScript. Ele suporta os mesmos SGBDs que o Sequelize e oferece duas abordagens: Active Record e Data Mapper. O TypeORM também usa ativamente decoradores, tornando o código mais declarativo.



Instalação

npm install typeorm reflect-metadata pg


Exemplo: modelo com decorador e consulta

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

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

@Column() name: string;

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

async function createUser() { const connection = await createConnection({ type: 'postgres', host: 'localhost', database: 'test', entities: [User], synchronize: true }); const user = new User(); user.name = 'Maria'; user.email = 'maria@example.com'; await connection.manager.save(user); console.log(user);}createUser();


Características do TypeORM

  • Excelente integração com TypeScript e decoradores.
  • Flexibilidade: escolha entre Active Record e Data Mapper.
  • Suporte a migrações, inscritores de eventos e registro de logs.
  • Desvantagem: documentação por vezes incompleta, mudanças frequentes que quebram compatibilidade.


3. Prisma

Prisma é um ORM moderno que difere radicalmente dos seus antecessores. Em vez de modelos no código, você descreve o esquema de dados em um arquivo especial schema.prisma, e o Prisma gera um cliente type-safe. Isso garante autocompletar na IDE e minimiza erros.



Instalação

npm install @prisma/clientnpx prisma init


Exemplo: esquema e consulta

schema.prisma:

datasource db {  provider = "postgresql"  url      = env("DATABASE_URL")}

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


Código JavaScript:

const { PrismaClie                    

Recommendations