ORM für JavaScript (Node.js): Vergleich und Beispiele
In der modernen Webentwicklung mit Node.js ist die Interaktion mit Datenbanken (DB) eine der zentralen Aufgaben. Die Verwendung von reinem SQL-Code kann effektiv sein, führt aber oft zu Redundanzen, Fehlern und Wartungsproblemen. Hier kommen ORMs (Object-Relational Mapping) ins Spiel – Werkzeuge, die es ermöglichen, mit DB-Tabellen wie mit gewöhnlichen JavaScript-Objekten zu arbeiten. In diesem Artikel betrachten wir die drei beliebtesten ORMs für Node.js: Sequelize, TypeORM und Prisma, vergleichen ihre Eigenschaften und geben praktische Beispiele.
Was ist ein ORM und wozu wird es benötigt?
ORM (Object-Relational Mapping) ist eine Technologie, die relationale Datenbanken mit einer objektorientierten Programmiersprache verbindet. Anstatt SQL-Abfragen zu schreiben, manipuliert man Objekte und deren Methoden. Dies bietet mehrere Vorteile:
- Abstraktion von der DB: Sie können problemlos zwischen PostgreSQL, MySQL, SQLite wechseln, ohne die Geschäftslogik zu ändern.
- Sicherheit: ORM maskiert Daten automatisch und schützt so vor SQL-Injection.
- Komfort: Weniger Boilerplate-Code, automatische Migrationen, Datenvalidierung.
- Beziehungsunterstützung: Einfache Definition von Beziehungen (eins-zu-eins, eins-zu-viele, viele-zu-viele).
1. Sequelize
Sequelize ist eines der ältesten und ausgereiftesten ORMs für Node.js. Es unterstützt PostgreSQL, MySQL, MariaDB, SQLite und Microsoft SQL Server. Sequelize verwendet einen objektorientierten Ansatz und basiert auf Promises.
Hauptmerkmale:
- Flexibles System für Migrationen und Seeder (Befüllen mit Testdaten).
- Unterstützung für Transaktionen, Raw-Queries und Hooks (Lebenszyklus eines Modells).
- Große Community und viele fertige Lösungen.
Codebeispiel (Node.js):
const { Sequelize, DataTypes } = require('sequelize');
// Verbindung zur DBconst sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'postgres'});
// Modell definierenconst User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});
// Eintrag erstellenasync function createUser() { await sequelize.sync(); // Modell mit DB synchronisieren const user = await User.create({ name: 'Ivan', email: 'ivan@example.com' }); console.log('Benutzer erstellt:', user.toJSON());}
createUser().catch(console.error);2. TypeORM
TypeORM ist ein ORM, das mit Fokus auf TypeScript entwickelt wurde, aber auch mit reinem JavaScript funktioniert. Es unterstützt dieselben Datenbanken wie Sequelize, plus MongoDB (über einen experimentellen Modus). TypeORM verwendet Decorators (für TypeScript) und den Active-Record- oder Data-Mapper-Ansatz.
Hauptmerkmale:
- Vollständige TypeScript-Unterstützung mit Autovervollständigung und Typprüfung.
- Zwei Muster: Active Record (Methoden am Modell) und Data Mapper (Repositories).
- Automatische Migrationen basierend auf Änderungen an Entitäten.
Codebeispiel (Node.js + TypeScript):
import { Entity, PrimaryGeneratedColumn, Column, createConnection } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column() name: string;
@Column({ unique: true }) email: string;}
// Verwendungasync function main() { const connection = await createConnection({ type: "postgres", host: "localhost", database: "test", entities: [User], synchronize: true, // Automatische Tabellenerstellung (nicht für Produktion!) });
const user = new User(); user.name = "Maria"; user.email = "maria@example.com"; await