Previous Page
cover
TypeORM
ORM
Database
Nestjs
Author: Edison Chue 2022-02-19 3 mins read

TypeORM:基本介紹

什麼是 ORM

ORM(Object Relational Mapping)翻譯成中文為物件關聯對映,是一種在 OOP 上抽象 Database schema 的概念,ORM 除了能夠將資料庫中的資料轉換成物件外,還能實現大部份資料庫增刪查改的功能,ORM 使得操作資料庫變得更簡單,除非你的查詢非常費時(複雜),不然基本上不用寫任何一句的 SQL。

TypeORM

Node.js 生態系的其中一個 ORM Library,能夠使用在絕大部分的 Relational Database 上,某些 Document based database 也能用上 TypeORM,例如 MongoDB,詳盡的資料庫支援名單請參閱 TypeORM 的說明文件 https://typeorm.io

Screen_Shot_2022-02-19_at_17.26.34.png

一些 ORM 中常用的概念

Entity

映照到 Database Table 的類別 / 介面,每個 Table 均映照到一個 Entity 類。

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

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

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    age: number;

}

Repository pattern

一種用於封裝特定 Entity 資料存取的 Design Pattern,它們集中了常見的數據訪問功能,在使用 ORM 的時候配合此 pattern 能夠大幅簡化程式碼,並且提供更好的維護性和去耦合架構。

const repository = connection.getRepository(User);

const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await repository.save(user);

const allUsers = await repository.find();
const firstUser = await repository.findOne(1); // find by id
const timber = await repository.findOne({ firstName: "Timber", lastName: "Saw" });

await repository.remove(timber);

Query Builder

以物件導向的方式建構能重複使用的資料庫查詢。

const firstUser = await connection
    .getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();