TypeORM para TypeScript: guia completo com exemplos

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

O que é TypeORM e para que serve?

\n\n

TypeORM é uma poderosa biblioteca de mapeamento objeto-relacional (ORM) para TypeScript e JavaScript, que funciona com diversos bancos de dados: PostgreSQL, MySQL, MariaDB, SQLite, MS SQL Server, Oracle e MongoDB (parcialmente). Ela oferece uma maneira conveniente de interagir com bancos de dados relacionais através de uma abordagem orientada a objetos, permitindo que os desenvolvedores trabalhem com tabelas como classes e com registros como objetos.

\n\n

Principais razões para usar TypeORM:

\n
    \n
  • Tipagem: Integração completa com TypeScript garante tipagem forte e autocompletar na IDE.
  • \n
  • Abordagem declarativa: Definição do esquema do banco de dados através de decoradores ou esquemas.
  • \n
  • Automigrações: Criação e sincronização automática do esquema do banco de dados.
  • \n
  • Active Record e Data Mapper: Suporte para ambos os padrões populares.
  • \n
  • Suporte a relacionamentos: One-to-One, One-to-Many, Many-to-Many.
  • \n
  • Query Builder: Construtor de consultas flexível para consultas SQL complexas.
  • \n
  • Multiplataforma: Funciona com Node.js, navegadores, React Native e Ionic.
  • \n
\n\n

Instalação do TypeORM

\n\n

Para instalar o TypeORM e os drivers de banco de dados necessários, use npm (ou yarn):

\n\n
// Instalação do TypeORM\nnpm install typeorm --save\n\n// Instalação do reflect-metadata (obrigatório para decoradores)\nnpm install reflect-metadata --save\n\n// Instalação do driver para PostgreSQL\nnpm install pg --save\n\n// Instalação do driver para MySQL/MariaDB\nnpm install mysql2 --save\n\n// Instalação do driver para SQLite\nnpm install sqlite3 --save\n\n// Instalação do driver para SQL Server\nnpm install mssql --save\n\n// Instalação do driver para MongoDB (experimental)\nnpm install mongodb --save
\n\n

Após a instalação, adicione ao tsconfig.json:

\n\n
{\n  "compilerOptions": {\n    "emitDecoratorMetadata": true,\n    "experimentalDecorators": true\n  }\n}
\n\n

Início rápido com exemplo de código

\n\n

Vamos criar uma aplicação simples para gerenciar usuários usando SQLite (não requer instalação de servidor).

\n\n

1. Crie o arquivo data-source.ts para configuração da conexão:

\n\n
import { DataSource } from "typeorm";\nimport { User } from "./entity/User";\n\nexport const AppDataSource = new DataSource({\n    type: "sqlite",\n    database: "database.sqlite",\n    synchronize: true,\n    logging: true,\n    entities: [User],\n    subscribers: [],\n    migrations: [],\n});\n\n// Inicialização da conexão\nAppDataSource.initialize()\n    .then(() => {\n        console.log("Data Source has been initialized!");\n    })\n    .catch((err) => {\n        console.error("Error during Data Source initialization:", err);\n    });
\n\n

2. Crie a entidade User no arquivo entity/User.ts:

\n\n
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";\n\n@Entity()\nexport class User {\n    @PrimaryGeneratedColumn()\n    id: number;\n\n    @Column()\n    firstName: string;\n\n    @Column()\n    lastName: string;\n\n    @Column({ unique: true })\n    email: string;\n\n    @Column({ default: true })\n    isActive: boolean;\n}
\n\n

3. Crie o arquivo index.ts para demonstrar o funcionamento:

\n\n
import "reflect-metadata";\nimport { AppDataSource } from "./data-source";\nimport { User } from "./entity/User";\n\nasync function main() {\n    await AppDataSource.initialize();\n\n    // Criando um novo usuário\n    const user = new User();\n    user.firstName = "Ivan";\n    user.lastName = "Petrov";\n    user.email = "ivan@example.com";\n    user.isActive = true;\n\n    // Salvando no banco de dados\n    await AppDataSource.manager                    

Recommendations