Skip to main content

TypeORM

TypeORM ist ein Object-Relational Mapping (ORM) Framework für TypeScript und JavaScript, das mit verschiedenen Datenbanken arbeitet. Es ermöglicht die Arbeit mit Datenbanken auf einer höheren Abstraktionsebene durch die Verwendung von Klassen und Objekten.

Hauptmerkmale​

  • TypeScript und JavaScript Unterstützung
  • Unterstützung für verschiedene Datenbanken
  • Entity-basierte Entwicklung
  • Migrationen
  • Query Builder
  • Relations Management

Installation​

npm install typeorm reflect-metadata
npm install @types/node --save-dev

Grundlegende Konfiguration​

  1. tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
  1. ormconfig.json:
{
"type": "sqlite",
"database": "database.sqlite",
"entities": ["src/entity/**/*.ts"],
"migrations": ["src/migration/**/*.ts"],
"subscribers": ["src/subscriber/**/*.ts"],
"cli": {
"entitiesDir": "src/entity",
"migrationsDir": "src/migration",
"subscribersDir": "src/subscriber"
}
}

Entities definieren​

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

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

@Column()
firstName: string;

@Column()
lastName: string;

@Column()
age: number;
}

Datenbankverbindung herstellen​

import "reflect-metadata";
import { createConnection } from "typeorm";

createConnection()
.then(async (connection) => {
// Hier kann mit der Datenbank gearbeitet werden
})
.catch((error) => console.log(error));

CRUD-Operationen​

Erstellen​

const user = new User();
user.firstName = "Arlind";
user.lastName = "Beqiri";
user.age = 17;
await connection.manager.save(user);

Lesen​

const users = await connection.manager.find(User);
const user = await connection.manager.findOne(User, 1);

Aktualisieren​

const user = await connection.manager.findOne(User, 1);
user.age = 26;
await connection.manager.save(user);

Löschen​

await connection.manager.delete(User, 1);

Relations​

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

@Column()
url: string;

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

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

@OneToMany((type) => Photo, (photo) => photo.user)
photos: Photo[];
}

Migrationen​

typeorm migration:create -n CreateUsersTable

Best Practices​

  • Entities sauber strukturieren
  • Indexes für Performance
  • Caching nutzen
  • Transaktionen verwenden
  • Fehlerbehandlung implementieren

Debugging​

  • Logging aktivieren
  • Query Builder nutzen
  • SQL-Ausgaben überprüfen

Ressourcen​