ORM für TypeScript: Vergleich von Prisma, TypeORM und Drizzle – Codebeispiele

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 TypeScript: Vergleich und Beispiele



In der modernen Webentwicklung mit TypeScript kann die Wahl des richtigen ORM (Object-Relational Mapping) die Entwicklung erheblich beschleunigen und die Zuverlässigkeit der Anwendung erhöhen. Ein ORM ermöglicht die Arbeit mit Datenbanken durch einen objektorientierten Ansatz und vermeidet das Schreiben von rohen SQL-Abfragen. In diesem Artikel vergleichen wir die drei beliebtesten ORMs für TypeScript: Prisma, TypeORM und Drizzle, und betrachten Beispiele für deren Verwendung.



1. Prisma – der moderne Standard



Prisma ist ein ORM der nächsten Generation, das sich auf Entwicklerfreundlichkeit und Leistung konzentriert. Es verwendet eine eigene Schemabeschreibungssprache (Prisma Schema) und generiert einen vollständig typisierten Client.



Wichtige Funktionen:

  • Automatische Generierung von TypeScript-Typen
  • Intuitiv verständliche API für Abfragen
  • Integrierte Datenmigration (Prisma Migrate)
  • Unterstützung für PostgreSQL, MySQL, SQLite, MongoDB und andere


Codebeispiel in TypeScript:

// schema.prismamodel User {  id    Int     @id @default(autoincrement())  name  String  email String  @unique  posts Post[]}

model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}

// Verwendung im Codeimport { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUsersWithPosts() { const users = await prisma.user.findMany({ include: { posts: true } }); return users;}


2. TypeORM – der Klassiker für TypeScript



TypeORM ist ein ausgereiftes ORM, das sowohl Active Record- als auch Data Mapper-Muster unterstützt. Es ist eng mit TypeScript integriert und verwendet Dekorateure zur Definition von Modellen.



Wichtige Funktionen:

  • Unterstützung von Dekorateuren und Klassen
  • Zwei Ansätze: Active Record und Data Mapper
  • Erweiterte Migration und Ereignisabonnements
  • Unterstützung vieler DBMS


Codebeispiel in TypeScript:

import { Entity, PrimaryGeneratedColumn, Column, OneToMany, createConnection } from "typeorm";

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

@Column() name: string;

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

@OneToMany(() => Post, post => post.user) posts: Post[];}

@Entity()export class Post { @PrimaryGeneratedColumn() id: number;

@Column() title: string;

@Column({ nullable: true }) content: string;

@ManyToOne(() => User, user => user.posts) user: User;}

// Verwendungasync function getUsersWithPosts() { const connection = await createConnection(); const userRepository = connection.getRepository(User); return await userRepository.find({ relations: ["posts"] });}


3. Drizzle – leichtgewichtig und leistungsstark



Drizzle ist ein relativ neues ORM, das den Schwerpunkt auf Leistung und minimale Bundle-Größe legt. Es verwendet eine SQL-ähnliche Syntax und erfordert keine Codegenerierung.



Wichtige Funktionen:

  • Minimale Größe und hohe Geschwindigkeit
  • Native TypeScript-Unterstützung ohne Dekorateure
  • SQL-ähnliche API (Query Builder)
  • Kompatibilität mit SQL-Datenbanken


Codebeispiel in TypeScript:

import { drizzle } from 'drizzle-orm/better-sqlite3';import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';import Database from 'better-sqlite3';

const sqlite = new Database('test.db');const db = drizzle(sqlite);

// Schema-Definitionconst users = sqliteTable('users', { id: integer('id').primaryKey(), name: text('na

Empfehlungen