typeorm
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编写,易于使用和配置。