ORM für JavaScript (Node.js): Vergleich und Beispiele
Bei der Entwicklung von Serveranwendungen mit Node.js ist die Interaktion mit der Datenbank eine der zentralen Aufgaben. Object-Relational Mapping (ORM) ermöglicht die Arbeit mit relationalen Datenbanken über JavaScript-Objekte und erspart das Schreiben von reinem SQL. In diesem Artikel betrachten wir drei beliebte ORMs: Sequelize, TypeORM und Prisma, vergleichen ihre Eigenschaften und geben praktische Beispiele.
1. Sequelize
Sequelize ist eines der ältesten und ausgereiftesten ORMs für Node.js. Es unterstützt PostgreSQL, MySQL, MariaDB, SQLite und MSSQL. Es arbeitet mit Promises und async/await.
Installation und Einrichtung
npm install sequelize sequelize-clinpm install pg pg-hstore # für PostgreSQLBeispiel für Modell und Abfragen
const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('postgres://user:pass@localhost:5432/mydb');
// Modell definierenconst User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});
// Datensatz erstellenconst user = await User.create({ name: 'Ivan', email: 'ivan@example.com' });
// Suche mit Filterconst users = await User.findAll({ where: { name: 'Ivan' } });
// Aktualisierenawait User.update({ email: 'new@example.com' }, { where: { id: 1 } });Vor- und Nachteile
- + Große Community, viel Dokumentation
- + Unterstützung für Migrationen und Seeds
- - Umständliche Syntax für komplexe Abfragen
- - Keine integrierte TypeScript-Unterstützung
2. TypeORM
TypeORM ist ein ORM, das auf TypeScript ausgerichtet ist, aber auch mit normalem JavaScript funktioniert. Es unterstützt Dekorateure, Active Record und Data Mapper. Es arbeitet mit den meisten gängigen DBMS.
Installation und Einrichtung
npm install typeorm reflect-metadatanpm install pg # für PostgreSQLBeispiel für ein Modell mit Dekorateuren
import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column() name: string;
@Column({ unique: true }) email: string;}
// Verwendungconst connection = await createConnection();const userRepo = connection.getRepository(User);const user = await userRepo.save({ name: 'Anna', email: 'anna@example.com' });const users = await userRepo.find({ where: { name: 'Anna' } });Vor- und Nachteile
- + Hervorragende TypeScript-Unterstützung
- + Zwei Ansätze: Active Record und Data Mapper
- - Komplexe Konfiguration für Anfänger
- - Langsame Migrationen in großen Projekten
3. Prisma
Prisma ist ein modernes ORM, das eine eigene Schema-Sprache verwendet und einen typsicheren Client generiert. Es gilt als das leistungsfähigste und entwicklerfreundlichste.
Installation und Einrichtung
npm install @prisma/clientnpx prisma initSchema-Definition (schema.prisma)
model User { id Int @id @default(autoincrement()) name String email String @unique}Beispiel für Abfragen
import { PrismaClient } from '@prisma/client';const prisma = new PrismaClient();
// Erstellenconst user = await prisma.user.create({ data: { name: 'Olga', email: 'olga@example.com' }});
// Suchenconst users = await prisma.user.findMany({ where: { name: 'Olga' } });
// Aktualisierenawait prisma.user.update({ where: { id: 1 }, data: { email: 'new@example.com' }});Vor- und Nachteile
- + Vollständige Typsicherheit
Auch in der Bibliothek
Arbeit mit S3 und Cloud-Speichern in Java: Die AWS SDK-Bibliothek
E-Mail-Versand mit PHP: Vollständiger Leitfaden zur PHPMailer-Bibliothek
WebSocket in C++: Bibliotheken und praktische Anwendung
Dependency Injection Container für C# (.NET) — vollständige Anleitung
Elasticsearch-Client für Swift (iOS/macOS): Integration und Beispiele