ORM für JavaScript (Node.js): Vergleich von Sequelize, TypeORM, Prisma

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

ORM für JavaScript (Node.js): Vergleich und Beispiele



Bei der Entwicklung serverseitiger Anwendungen mit Node.js stellt sich früher oder später die Frage der Interaktion mit der Datenbank. Das Schreiben von reinen SQL-Abfragen ist eine aufwändige und fehleranfällige Aufgabe. Hier helfen ORM (Object-Relational Mapping) – Bibliotheken, die es ermöglichen, mit Datenbanktabellen wie mit gewöhnlichen JavaScript-Objekten zu arbeiten. In diesem Artikel vergleichen wir die drei beliebtesten ORMs für Node.js: Sequelize, TypeORM und Prisma, und zeigen anschauliche Codebeispiele.



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 den klassischen Ansatz mit Modellen und Promises (oder async/await).



Installation

npm install sequelize pg pg-hstore


Beispiel: Modell-Definition und Abfrage

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('database', 'user', 'password', {  host: 'localhost',  dialect: 'postgres'});

const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

async function createUser() { await sequelize.sync(); const user = await User.create({ name: 'Ivan', email: 'ivan@example.com' }); console.log(user.toJSON());}createUser();


Besonderheiten von Sequelize

  • Ausgereiftheit und große Community.
  • Unterstützung von Transaktionen, Migrationen und Seed-Daten.
  • Flexibles System für Assoziationen (hasOne, hasMany, belongsToMany).
  • Nachteil: stellenweise umständliche Syntax und schwieriges Debugging.


2. TypeORM

TypeORM ist ein ORM, das sowohl mit JavaScript als auch mit TypeScript arbeiten kann. Es unterstützt dieselben DBMS wie Sequelize und bietet zwei Ansätze: Active Record und Data Mapper. TypeORM verwendet zudem aktiv Decoratoren, was den Code deklarativer macht.



Installation

npm install typeorm reflect-metadata pg


Beispiel: Modell mit Decorator und Abfrage

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()class User { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column({ unique: true }) email: string;}

async function createUser() { const connection = await createConnection({ type: 'postgres', host: 'localhost', database: 'test', entities: [User], synchronize: true }); const user = new User(); user.name = 'Maria'; user.email = 'maria@example.com'; await connection.manager.save(user); console.log(user);}createUser();


Besonderheiten von TypeORM

  • Hervorragende Integration mit TypeScript und Decoratoren.
  • Flexibilität: Wahl zwischen Active Record und Data Mapper.
  • Unterstützung von Migrationen, Event-Subscribern und Logging.
  • Nachteil: Dokumentation ist stellenweise unvollständig, häufige Breaking Changes.


3. Prisma

Prisma ist ein modernes ORM, das sich grundlegend von seinen Vorgängern unterscheidet. Anstatt Modelle im Code zu definieren, beschreiben Sie das Datenschema in einer speziellen Datei schema.prisma, und Prisma generiert einen typsicheren Client. Dies ermöglicht Autovervollständigung in der IDE und minimiert Fehler.



Installation

npm install @prisma/clientnpx prisma init


Beispiel: Schema und Abfrage

schema.prisma:

datasource db {  provider = "postgresql"  url      = env("DATABASE_URL")}

model User { id Int @id @default(autoincrement()) name String email String @unique}


JavaScript-Code:

const { PrismaClie                    

Empfehlungen