TypeORM para TypeScript: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es TypeORM y para qué sirve?

\n\n

TypeORM es una potente biblioteca de mapeo objeto-relacional (ORM) para TypeScript y JavaScript que funciona con varias bases de datos: PostgreSQL, MySQL, MariaDB, SQLite, MS SQL Server, Oracle y MongoDB (parcialmente). Proporciona una forma conveniente de interactuar con bases de datos relacionales mediante un enfoque orientado a objetos, permitiendo a los desarrolladores trabajar con tablas como clases y con registros como objetos.

\n\n

Razones principales para usar TypeORM:

\n
    \n
  • Tipado: Integración completa con TypeScript que proporciona tipado estricto y autocompletado en el IDE.
  • \n
  • Enfoque declarativo: Definición del esquema de la base de datos mediante decoradores o esquemas.
  • \n
  • Migraciones automáticas: Creación y sincronización automática del esquema de la base de datos.
  • \n
  • Active Record y Data Mapper: Soporte para ambos patrones populares.
  • \n
  • Soporte de relaciones: One-to-One, One-to-Many, Many-to-Many.
  • \n
  • Query Builder: Constructor de consultas flexible para consultas SQL complejas.
  • \n
  • Multiplataforma: Funciona con Node.js, navegadores, React Native e Ionic.
  • \n
\n\n

Instalación de TypeORM

\n\n

Para instalar TypeORM y los controladores de base de datos necesarios, use npm (o yarn):

\n\n
// Instalación de TypeORM\nnpm install typeorm --save\n\n// Instalación de reflect-metadata (obligatorio para decoradores)\nnpm install reflect-metadata --save\n\n// Instalación del controlador para PostgreSQL\nnpm install pg --save\n\n// Instalación del controlador para MySQL/MariaDB\nnpm install mysql2 --save\n\n// Instalación del controlador para SQLite\nnpm install sqlite3 --save\n\n// Instalación del controlador para SQL Server\nnpm install mssql --save\n\n// Instalación del controlador para MongoDB (experimental)\nnpm install mongodb --save
\n\n

Después de la instalación, agregue en tsconfig.json:

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

Inicio rápido con ejemplo de código

\n\n

Creemos una aplicación simple para gestionar usuarios usando SQLite (no requiere instalación de servidor).

\n\n

1. Cree el archivo data-source.ts para la configuración de la conexión:

\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// Inicialización de la conexión\nAppDataSource.initialize()\n    .then(() => {\n        console.log("¡El Data Source ha sido inicializado!");\n    })\n    .catch((err) => {\n        console.error("Error durante la inicialización del Data Source:", err);\n    });
\n\n

2. Cree la entidad User en el archivo 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. Cree el archivo index.ts para demostrar el funcionamiento:

\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    // Creamos un nuevo usuario\n    const user = new User();\n    user.firstName = "Iván";\n    user.lastName = "Petrov";\n    user.email = "ivan@example.com";\n    user.isActive = true;\n\n    // Guardamos en la base de datos\n    await AppDataSource.manager                    

Recommendations