Mikro-ORM für TypeScript: Komplettes Tutorial mit Beispielen
1. Was ist Mikro-ORM und warum braucht man es?
Mikro-ORM ist eine moderne objektrelationale Bibliothek (ORM) für TypeScript und JavaScript (Node.js), die die Entwurfsmuster Identity Map und Unit of Work implementiert. Im Gegensatz zu klassischen ORMs wie TypeORM oder Sequelize ist Mikro-ORM von Doctrine (PHP) und Hibernate (Java) inspiriert und bietet eine vorhersehbarere Verwaltung des Entity-Zustands sowie deren Synchronisation mit der Datenbank.
Warum wird es benötigt? In typischen Webanwendungen stoßen Entwickler häufig auf das Problem „schmutziger“ Daten, wenn derselbe Datensatz an verschiedenen Stellen im Code zweimal geladen wird, was zu Konflikten beim Speichern führt. Mikro-ORM löst dieses Problem mit der Identity Map: Für jeden Primärschlüssel gibt es innerhalb eines Kontexts (EntityManager) genau eine Instanz einer Entität. Dies stellt sicher, dass Sie stets mit der aktuellen Version des Objekts arbeiten und alle Änderungen automatisch nachverfolgt werden.
Die Bibliothek unterstützt zahlreiche Datenbanksysteme (PostgreSQL, MySQL, SQLite, MongoDB, MariaDB) und bietet leistungsstarke Werkzeuge: Migrationen, integrierte Transaktionsunterstützung, kaskadierende Operationen, Laden von Beziehungen (eager/lazy), einen integrierten Schema-Validator und einen Entity-Generator aus bestehenden Datenbanken. Mikro-ORM eignet sich ideal für komplexe Domänenmodelle und Microservices-Architekturen, bei denen Datenkonsistenz entscheidend ist.
2. Installation
Für die Installation von Mikro-ORM und des erforderlichen Datenbanktreibers führen Sie den folgenden Befehl über npm (oder yarn/pnpm) aus:
# Installation des Bibliothekskerns
npm install @mikro-orm/core
# Installation des Treibers für Ihre Datenbank (wählen Sie einen aus):
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
# Zusätzlich: CLI für Migrationen und Schema-Generierung
npm install @mikro-orm/cli
npm install @mikro-orm/migrations # für Migrationen
Es wird außerdem empfohlen, reflect-metadata für die Arbeit mit Dekorateuren zu installieren:
npm install reflect-metadata
Fügen Sie in tsconfig.json Folgendes hinzu:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "ES2021",
"module": "commonjs"
}
}
3. Schnellstart – Minimales funktionsfähiges Beispiel
Wir erstellen eine einfache Anwendung mit SQLite und einer Entität User.
Schritt 1. Entität definieren (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();
}
Schritt 2. Mikro-ORM konfigurieren (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, // SQL-Abfragen loggen
});
// Schema erstellen (im Dev-Modus)
await orm.getSchemaGenerator().createSchema();
// EntityManager abrufen
const em = orm.em.fork();
// Benutzer erstellen
const user = em.create(User, {
name: 'Max',
email: 'max@example.com',
});
await em.flush(); // In Datenbank speichern
// Benutzer lesen
const found = await em.findOne(User, { email: 'max@example.com' });
console.log('Gefunden:', found);
// Aktualisieren
found!.name = 'Moritz'; Auch in der Bibliothek
Bildverarbeitung in Java: Bibliotheken, Werkzeuge und Codebeispiele
Arbeit mit Kafka in Kotlin: Bibliotheken, Einrichtung und Beispiele
Flysystem PHP: Komplettes Handbuch mit Praxisbeispielen
NestJS für JavaScript (Node.js): Komplettleitfaden mit Beispielen
Proptest für Rust: Vollständiges Tutorial mit Beispielen