Mikro-ORM para TypeScript: guia completo com exemplos práticos

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

Mikro-ORM para TypeScript: guia completo com exemplos práticos

1. O que é e para que serve?

Mikro-ORM é uma biblioteca moderna de mapeamento objeto-relacional (ORM) para TypeScript e JavaScript (Node.js) que implementa os padrões Identity Map e Unit of Work. Diferente de ORMs clássicos como TypeORM ou Sequelize, o Mikro-ORM é inspirado no Doctrine (PHP) e Hibernate (Java), oferecendo um gerenciamento mais previsível do estado das entidades e sua sincronização com o banco de dados.

Para que serve? Em aplicações web típicas, desenvolvedores frequentemente enfrentam o problema de "dados sujos", quando o mesmo registro é carregado duas vezes em partes diferentes do código, gerando conflitos ao salvar. O Mikro-ORM resolve isso com o Identity Map: para cada chave primária, existe exatamente uma instância da entidade dentro de um mesmo contexto (EntityManager). Isso garante que você sempre trabalhe com a versão mais atual do objeto, e todas as alterações são rastreadas automaticamente.

A biblioteca suporta diversos bancos de dados (PostgreSQL, MySQL, SQLite, MongoDB, MariaDB) e oferece ferramentas poderosas: migrations, suporte nativo a transações, operações em cascata, carregamento de relacionamentos (eager/lazy), validador de esquemas integrado e gerador de entidades a partir de bancos existentes. O Mikro-ORM é ideal para modelos de domínio complexos e arquiteturas de microsserviços onde a consistência dos dados é essencial.

2. Instalação

Para instalar o Mikro-ORM e o driver necessário do banco de dados, execute o comando via npm (ou yarn/pnpm):

# Instalação do núcleo da biblioteca
npm install @mikro-orm/core

# Instalação do driver para seu banco (escolha um):
npm install @mikro-orm/sqlite    # SQLite
npm install @mikro-orm/postgresql # PostgreSQL
npm install @mikro-orm/mysql      # MySQL / MariaDB
npm install @mikro-orm/mongodb    # MongoDB

# Adicional: CLI para migrations e geração de esquemas
npm install @mikro-orm/cli
npm install @mikro-orm/migrations  # para migrations

Também é recomendado instalar o reflect-metadata para o funcionamento dos decoradores:

npm install reflect-metadata

Adicione ao tsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "target": "ES2021",
    "module": "commonjs"
  }
}

3. Início rápido — exemplo mínimo funcional

Vamos criar uma aplicação simples com SQLite e uma entidade User.

Passo 1. Definindo a entidade (entities/User.ts):

import { Entity, PrimaryKey, Property } from '@mikro-orm/core';

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

  @Property()
  name!: string;

  @Property()
  email!: string;

  @Property()
  createdAt: Date = new Date();
}

Passo 2. Configurando o Mikro-ORM (index.ts):

import 'reflect-metadata';
import { MikroORM } from '@mikro-orm/core';
import { SqliteDriver } from '@mikro-orm/sqlite';
import { User } from './entities/User';

async function main() {
  const orm = await MikroORM.init({
    entities: [User],
    dbName: 'test.db',
    driver: SqliteDriver,
    debug: true, // logs das consultas SQL
  });

  // Criando o esquema (em modo dev)
  await orm.getSchemaGenerator().createSchema();

  // Obtendo o EntityManager
  const em = orm.em.fork();

  // Criando um usuário
  const user = em.create(User, {
    name: 'João',
    email: 'joao@example.com',
  });
  await em.flush(); // salvando no banco

  // Lendo o usuário
  const found = await em.findOne(User, { email: 'joao@example.com' });
  console.log('Encontrado:', found);

  // Atualizando
  found!.name = 'Pedro';

Recommendations