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
- tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
- 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