34-1 Introduction à Active Record
Pour effectuer les requêtes à la base de données en utilisant l'ORM TypeORM, nous utiliserons le design pattern Active Record.
Avec ce type d'architecture, une entité est liée à une table de base de données. L'entité possède des méthodes comme find ou save qui permettent de faire des requêtes à la base de données à partir de l'entité.
L'ORM est responsable de générer les requêtes SQL pour vous, sans que vous ayiez à écrire du SQL!
Par exemple, pour une classe User (vous n'avez pas à la créer, c'est un exemple)...
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
isActive: boolean
}
... il est possible d'effectuer les opérations suivantes.
// On crée un utilisateur et ses attributs
const user = new User()
user.firstName = "Benoit"
user.lastName = "Tremblay"
user.isActive = true
// Sauvegarde l'utilisateur (génère une requête `INSERT`)
await user.save()
// Supprime un utilisateur (génère une requête `DELETE`)
await user.remove()
// Récupère les utilisateurs ayant `isActive` à `true` (WHERE isActive = true)
const newUsers = await User.findBy({ isActive: true })
// Récupère un seule utilisateur selon les propriétés firstName et lastName
const timber = await User.findOneBy({ firstName: "Timber", lastName: "Saw" })
Ces opérations sont rendues possibles puisque la classe hérite de BaseEntity et lui ajoute plusieurs fonctions, dont save, find, findBy, etc. L'ORM s'occupe de générer les requêtes SQL et de faire l'association entre le retour SQL et l'objet TypeScript.
À l'aide de WebStom, vous pouvez regarder la définition de la classe BaseEntity et voir les différentes méthodes qu'elle rend possible.
Sinon, voici sur GitHub la source de BaseEntity: https://github.com/typeorm/typeorm/blob/master/src/repository/BaseEntity.ts