TypeORM pour TypeScript : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que TypeORM et pourquoi en a-t-on besoin ?

\n\n

TypeORM est une puissante bibliothèque de mappage objet-relationnel (ORM) pour TypeScript et JavaScript, qui fonctionne avec diverses bases de données : PostgreSQL, MySQL, MariaDB, SQLite, MS SQL Server, Oracle et MongoDB (partiellement). Elle offre un moyen pratique d'interagir avec les bases de données relationnelles via une approche orientée objet, permettant aux développeurs de travailler avec des tables comme avec des classes, et avec des enregistrements comme avec des objets.

\n\n

Les principales raisons d'utiliser TypeORM :

\n
    \n
  • Typage : Intégration complète avec TypeScript assurant un typage strict et l'autocomplétion dans l'IDE.
  • \n
  • Approche déclarative : Définition du schéma de base de données via des décorateurs ou des schémas.
  • \n
  • Auto-migrations : Création et synchronisation automatiques du schéma de base de données.
  • \n
  • Active Record et Data Mapper : Prise en charge des deux modèles populaires.
  • \n
  • Prise en charge des relations : One-to-One, One-to-Many, Many-to-Many.
  • \n
  • Query Builder : Constructeur de requêtes flexible pour les requêtes SQL complexes.
  • \n
  • Multiplateforme : Fonctionne avec Node.js, les navigateurs, React Native et Ionic.
  • \n
\n\n

Installation de TypeORM

\n\n

Pour installer TypeORM et les pilotes de base de données nécessaires, utilisez npm (ou yarn) :

\n\n
// Installation de TypeORM\nnpm install typeorm --save\n\n// Installation de reflect-metadata (obligatoire pour les décorateurs)\nnpm install reflect-metadata --save\n\n// Installation du pilote pour PostgreSQL\nnpm install pg --save\n\n// Installation du pilote pour MySQL/MariaDB\nnpm install mysql2 --save\n\n// Installation du pilote pour SQLite\nnpm install sqlite3 --save\n\n// Installation du pilote pour SQL Server\nnpm install mssql --save\n\n// Installation du pilote pour MongoDB (expérimental)\nnpm install mongodb --save
\n\n

Après l'installation, ajoutez dans tsconfig.json :

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

Démarrage rapide avec un exemple de code

\n\n

Créons une application simple pour gérer les utilisateurs avec SQLite (ne nécessite pas d'installation de serveur).

\n\n

1. Créez le fichier data-source.ts pour la configuration de la connexion :

\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// Initialisation de la connexion\nAppDataSource.initialize()\n    .then(() => {\n        console.log("La source de données a été initialisée !");\n    })\n    .catch((err) => {\n        console.error("Erreur lors de l'initialisation de la source de données :", err);\n    });
\n\n

2. Créez l'entité User dans le fichier 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. Créez le fichier index.ts pour démontrer le fonctionnement :

\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    // Création d'un nouvel utilisateur\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    // Sauvegarde dans la base de données\n    await AppDataSource.manager                    

Recommendations