首先自然是下载typeorm需要使用的依赖库:
npm install --save @nestjs/typeorm typeorm mysql2
导入TypeOrmModule到modules
我的目录是这样的
sqlorm.modules.ts中导入TypeOrmModule,进而把我的sqlormModule导入到root的APPModule中去。这个目录主要存放数据表的实例和一些通过的数据库curd操作以及数据库相关配置等。
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class SqlOrmModule {}
当然如果想要通过配置文件加载数据库连接配置选项可以通过forRootAsync方法引入
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
@Module({
imports: [
TypeOrmModule.forRootAsync({
useFactory: async (config: ConfigService) => {
return {
type: 'mysql',
host: config.get<string>('db.remote.ip'),
port: config.get<number>('db.remote.port'),
username: config.get<string>('db.remote.username'),
password: config.get<string>('db.remote.password'),
database: config.get<string>('db.remote.database'),
autoLoadEntities: true // 配置这个选项之后在各个模块中通过 TypeOrmModule.forFeature()引入的模块将自动引入,无需再配置entities项
}
}
}),
],
})
export class SqlOrmModule {}
完成上述配置后需要在根模块 app.moudule.ts 下引入 sqlorm.module.ts
接下来我们可以创建 entity 实例并应用, 以下是一个user实例:
export enum UserStatus {
CANCEL, // 已注销账号
ACTIVITY // 活跃账号
}
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: 'varchar',
width: 100,
})
username: string;
@Column()
password: string;
@Column({
nullable: true,
})
nickname: string;
@Column({
type: 'text',
nullable: true,
})
mark: string;
@Column({
nullable: true,
})
real_name: string;
@Column({
type: 'tinyint',
width: 3,
})
age: number;
// 这里通过 type: 'enum' 创建一个枚举类型,遇到状态一类的字段非常好用
@Column({
type: 'enum',
enum: UserStatus,
default: UserStatus.ACTIVITY,
})
status: UserStatus;
}
以上是typeorm中创建实例的一些方法,还可以创建一对一,一对多,多对多的关系,具体可以查看官方文档: typeorm.io/entities
国内ip访问文档查看 typeorm.biunav.com/zh/#%E5%88%…
创建完成实例之后,需要通过,forFeature方法来引入实例到模块中
接下来只要通过
InjectRepository 装饰器注入到对应的构造函数便可操作数据库了