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 de aplicações server-side com Node.js, a interação com o banco de dados é uma das tarefas principais. O Object-Relational Mapping (ORM) permite trabalhar com bancos de dados relacionais através de objetos JavaScript, eliminando a necessidade de escrever SQL puro. Neste artigo, analisaremos três ORMs populares: Sequelize, TypeORM e Prisma, compararemos suas características e apresentaremos exemplos práticos.



1. Sequelize



Sequelize é uma das ORMs mais antigas e maduras para Node.js. Suporta PostgreSQL, MySQL, MariaDB, SQLite e MSSQL. Funciona com promises e async/await.



Instalação e configuração

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


Exemplo de modelo e consultas

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

// Definição do modeloconst User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

// Criar registroconst user = await User.create({ name: 'Ivan', email: 'ivan@example.com' });

// Buscar com filtroconst users = await User.findAll({ where: { name: 'Ivan' } });

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


Prós e contras

  • + Grande comunidade, muita documentação
  • + Suporte a migrações e seeds
  • - Sintaxe verbosa para consultas complexas
  • - Sem suporte nativo a TypeScript


2. TypeORM



TypeORM é uma ORM voltada para TypeScript, mas também funciona com JavaScript comum. Suporta decoradores, Active Record e Data Mapper. Funciona com a maioria dos SGBDs populares.



Instalação e configuração

npm install typeorm reflect-metadatanpm install pg # para PostgreSQL


Exemplo de modelo com 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' } });


Prós e contras

  • + Excelente suporte a TypeScript
  • + Duas abordagens: Active Record e Data Mapper
  • - Configuração complexa para iniciantes
  • - Migrações lentas em projetos grandes


3. Prisma



Prisma é uma ORM moderna que utiliza sua própria linguagem de esquema e gera um cliente type-safe. É considerada a mais performática e amigável para desenvolvedores.



Instalação e configuração

npm install @prisma/clientnpx prisma init


Definição do esquema (schema.prisma)

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


Exemplo de consultas

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

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

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

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


Prós e contras

  • + Type-safety completo

Recommendations