ORM para TypeScript: comparação e exemplos
No desenvolvimento web moderno com TypeScript, escolher o ORM (Object-Relational Mapping) correto é uma das decisões-chave que afeta a arquitetura, o desempenho e a facilidade de manutenção do projeto. ORM permite trabalhar com o banco de dados através de objetos da linguagem de programação, abstraindo consultas SQL. Neste artigo, veremos três ORMs mais populares para TypeScript: TypeORM, Prisma e MikroORM. Você conhecerá seus pontos fortes e fracos, além de ver exemplos de código para cada um deles.
1. TypeORM
TypeORM — um dos ORMs mais antigos e maduros para TypeScript e JavaScript. Ele suporta os padrões Active Record e Data Mapper, além de vários bancos de dados: PostgreSQL, MySQL, SQLite, MongoDB e outros.
Características do TypeORM:
- Suporte a decoradores para definição de entidades
- Relacionamentos flexíveis: OneToOne, OneToMany, ManyToMany
- Migrações e sincronização de esquema
- Suporte a assinaturas e eventos do ciclo de vida
- Query Builder para consultas complexas
Exemplo de código com TypeORM:
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, createConnection } from "typeorm";
@Entity()export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number;
@Column() name: string;
@Column() email: string;}
async function main() { await createConnection({ type: "postgres", host: "localhost", port: 5432, username: "test", password: "test", database: "test", entities: [User], synchronize: true, });
const user = new User(); user.name = "Ivan"; user.email = "ivan@example.com"; await user.save();
const users = await User.find(); console.log(users);}Pontos positivos: grande comunidade, muitos tutoriais, suporte a MongoDB. Pontos negativos: configuração complexa, problemas com lazy loading, API às vezes não intuitiva.
2. Prisma
Prisma — um ORM moderno que repensa a abordagem de trabalho com banco de dados. Em vez de um ORM tradicional, ele oferece três componentes: Prisma Client (cliente tipicamente seguro gerado automaticamente), Prisma Migrate (sistema de migrações) e Prisma Studio (interface gráfica).
Características do Prisma:
- Esquema de dados declarativo (schema.prisma)
- Tipagem completa baseada no esquema — sem tipos manuais
- Geração automática do cliente
- Suporte a transações e paginação
- Integração com GraphQL (Nexus, TypeGraphQL)
Exemplo de código com Prisma:
// 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])}
// main.tsimport { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() { const user = await prisma.user.create({ data: { name: 'Maria', email: 'maria@example.com', posts: { create: { title: 'Meu primeiro post' } } }, include: { posts: true } });
const users = await prisma.user.findMany({ include: { posts: true } }); console.log(users);}
main() .catch(e => console.error(e)) .finally(() => prisma.$disconnect());Pontos positivos: melhor tipagem da categoria, sintaxe simples, documentação excelente. Pontos negativos: dependência do esquema, complexidade com consultas personalizadas, maior consumo de memória.
3. MikroORM
MikroORM — é uma micro-ORM, inspirada no Doctrine
Também na biblioteca
Accompanist para Kotlin: guia completo com exemplos práticos
Guia completo de Symfony/Cache para PHP com exemplos práticos
multierr para Go: guia completo com exemplos práticos