TypeORM簡介
TypeORM是一個ORM框架,是使用TypeScript和JavaScript編寫的,它支持多種關係型數據庫,包括MySQL、PostgreSQL、SQLite和Microsoft SQL Server等。TypeORM可以幫助我們更輕鬆地管理數據庫,不需要編寫大量的SQL語句。
安裝
TypeORM可以使用npm進行安裝,我們可以在終端中輸入以下命令:
npm i typeorm --save
還需要安裝連接數據庫的庫,例如mysql、pg等:
npm i mysql --save
npm i pg --save
配置
TypeORM的配置是通過一個配置文件實現的。我們需要在項目根目錄下創建一個ormconfig.json
文件,這個文件包含了我們連接數據庫所需要的配置,例如數據庫類型、主機名、用戶名、密碼、端口以及數據庫名等信息。
一個簡單的ormconfig.json
文件如下:
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "database_name",
"entities": [
"src/entity/**/*.ts"
],
"synchronize": true
}
實體
實體是TypeORM的核心概念,它們是映射到數據庫表的類。TypeORM支持使用裝飾器將類轉換爲實體。一個簡單的實體類如下:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
}
實體類中使用@Entity()
裝飾器來表示這是一個實體類,並使用@PrimaryGeneratedColumn()
裝飾器表示這是主鍵列。
倉庫
倉庫是管理實體的類。TypeORM會爲每個實體自動生成一個倉庫類,我們也可以手動創建一個倉庫類來管理實體,使用@EntityRepository()
裝飾器來表示這是一個倉庫類。
import { EntityRepository, Repository } from "typeorm";
import { User } from "../entity/user.entity";
@EntityRepository(User)
export class UserRepository extends Repository<User> {}
查詢
TypeORM提供了一種基於查詢構造器的查詢語言,這使得構建SQL查詢更加簡便。例如,在倉庫類中查詢所有用戶的語句如下:
const users = await userRepository.find();
我們也可以添加一些條件查詢:
const users = await userRepository.find({
where: {
name: "John",
age: MoreThan(18)
},
order: {
name: "ASC"
},
skip: 10,
take: 10
})
關係
TypeORM支持多種關係,包括一對一、一對多、多對多等。例如,一個用戶可以擁有多個訂單:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
@OneToMany(type => Order, order => order.user)
orders: Order[];
}
@Entity()
export class Order {
@PrimaryGeneratedColumn()
id: number;
@Column()
amount: number;
@ManyToOne(type => User, user => user.orders)
user: User;
}
在用戶實體中,我們使用@OneToMany()
來表示一個用戶可以擁有多個訂單。在訂單實體中,我們使用@ManyToOne()
來表示多個訂單可以對應一個用戶。
總結
TypeORM是一個強大的ORM框架,提供了多種功能來管理數據庫。它支持多種數據庫,使用TypeScript或JavaScript編寫,易於使用和配置。