ORM para TypeScript: Comparação entre Prisma, TypeORM e Drizzle — exemplos de código

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 TypeScript: comparação e exemplos



No desenvolvimento web moderno com TypeScript, escolher o ORM (Object-Relational Mapping) correto pode acelerar significativamente o desenvolvimento e aumentar a confiabilidade da aplicação. O ORM permite trabalhar com bancos de dados através de uma abordagem orientada a objetos, evitando a escrita de consultas SQL brutas. Neste artigo, compararemos os três ORMs mais populares para TypeScript: Prisma, TypeORM e Drizzle, além de analisar exemplos de uso.



1. Prisma — o padrão moderno



Prisma é um ORM de nova geração que foca na facilidade de uso para o desenvolvedor e no desempenho. Ele utiliza sua própria linguagem de descrição de esquema (Prisma Schema) e gera um cliente totalmente tipado.



Características principais:

  • Geração automática de tipos TypeScript
  • API intuitiva para consultas
  • Migração de dados integrada (Prisma Migrate)
  • Suporte a PostgreSQL, MySQL, SQLite, MongoDB e outros


Exemplo de código em TypeScript:

// 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])}

// Uso no códigoimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUsersWithPosts() { const users = await prisma.user.findMany({ include: { posts: true } }); return users;}


2. TypeORM — o clássico para TypeScript



TypeORM é um ORM maduro que suporta tanto os padrões Active Record quanto Data Mapper. Ele é fortemente integrado com TypeScript e usa decoradores para definir modelos.



Características principais:

  • Suporte a decoradores e classes
  • Duas abordagens: Active Record e Data Mapper
  • Migração avançada e assinaturas de eventos
  • Suporte a vários SGBDs


Exemplo de código em TypeScript:

import { Entity, PrimaryGeneratedColumn, Column, OneToMany, createConnection } from "typeorm";

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

@Column() name: string;

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

@OneToMany(() => Post, post => post.user) posts: Post[];}

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

@Column() title: string;

@Column({ nullable: true }) content: string;

@ManyToOne(() => User, user => user.posts) user: User;}

// Usoasync function getUsersWithPosts() { const connection = await createConnection(); const userRepository = connection.getRepository(User); return await userRepository.find({ relations: ["posts"] });}


3. Drizzle — leve e performático



Drizzle é um ORM relativamente novo que enfatiza desempenho e tamanho mínimo do bundle. Ele usa uma sintaxe semelhante a SQL e não requer geração de código.



Características principais:

  • Tamanho mínimo e alta velocidade
  • Suporte nativo a TypeScript sem decoradores
  • API semelhante a SQL (query builder)
  • Compatibilidade com bancos de dados SQL


Exemplo de código em TypeScript:

import { drizzle } from 'drizzle-orm/better-sqlite3';import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';import Database from 'better-sqlite3';

const sqlite = new Database('test.db');const db = drizzle(sqlite);

// Definição do esquemaconst users = sqliteTable('users', { id: integer('id').primaryKey(), name: text('na

Recommendations