Mikro-ORM pour TypeScript : guide complet avec exemples
1. Qu'est-ce que Mikro-ORM et pourquoi l'utiliser ?
Mikro-ORM est une bibliothèque de mapping objet-relationnel (ORM) moderne pour TypeScript et JavaScript (Node.js), qui implémente les patrons de conception Identity Map et Unit of Work. Contrairement aux ORM classiques comme TypeORM ou Sequelize, Mikro-ORM s'inspire de Doctrine (PHP) et Hibernate (Java) et offre une gestion plus prévisible de l'état des entités et de leur synchronisation avec la base de données.
Pourquoi l'utiliser ? Dans les applications web typiques, les développeurs rencontrent souvent le problème des données « sales », lorsqu'un même enregistrement est chargé deux fois à différents endroits du code, ce qui entraîne des conflits lors de la sauvegarde. Mikro-ORM résout ce problème grâce à l'Identity Map : pour chaque clé primaire, il existe exactement une instance d'entité dans un contexte donné (EntityManager). Cela garantit que vous travaillez toujours avec la version la plus récente de l'objet, et toutes les modifications sont suivies automatiquement.
La bibliothèque prend en charge de nombreux SGBD (PostgreSQL, MySQL, SQLite, MongoDB, MariaDB) et fournit des outils puissants : migrations, support intégré des transactions, opérations en cascade, chargement des relations (eager/lazy), validateur de schéma intégré et générateur d'entités à partir d'une base de données existante. Mikro-ORM est idéal pour les modèles de domaine complexes et les architectures de microservices où la cohérence des données est cruciale.
2. Installation
Pour installer Mikro-ORM et le pilote de base de données nécessaire, exécutez la commande via npm (ou yarn/pnpm) :
# Installation du noyau de la bibliothèque
npm install @mikro-orm/core
# Installation du pilote pour votre base de données (choisissez-en un) :
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
# Supplément : CLI pour les migrations et la génération de schémas
npm install @mikro-orm/cli
npm install @mikro-orm/migrations # pour les migrations
Il est également recommandé d'installer reflect-metadata pour le fonctionnement des décorateurs :
npm install reflect-metadata
Ajoutez dans tsconfig.json :
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "ES2021",
"module": "commonjs"
}
}
3. Démarrage rapide — exemple minimal fonctionnel
Créons une application simple avec SQLite et une entité User.
Étape 1. Définir l'entité (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();
}
Étape 2. Configurer 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, // journalisation des requêtes SQL
});
// Créer le schéma (en mode développement)
await orm.getSchemaGenerator().createSchema();
// Obtenir l'EntityManager
const em = orm.em.fork();
// Créer un utilisateur
const user = em.create(User, {
name: 'Jean',
email: 'jean@exemple.com',
});
await em.flush(); // sauvegarder dans la base de données
// Lire l'utilisateur
const found = await em.findOne(User, { email: 'jean@exemple.com' });
console.log('Trouvé :', found);
// Mettre à jour
found!.name = 'Pierre'; Aussi dans la bibliothèque
ORM pour Swift (iOS/macOS) : comparaison et exemples d'utilisation
OneOf pour C# (.NET) : guide complet avec exemples
Cryptographie en Swift : chiffrement et hachage pour iOS/macOS
Travailler avec les archives ZIP en Kotlin : création, lecture et extraction
ts-node-dev TypeScript : guide complet avec exemples