TypeOrm

TypeOrm是TypeScript中最成熟的对象关系映射器(ORM),因为它是用TypeScript编写的,所以可以很好地与Nest框架集成

安装依赖:

1
npm install --save @nestjs/typeorm typeorm mysql2

引入TypeOrm

在app.module.ts注册:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TestModule } from './test/test.module';

@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql', // 数据库类型
username: 'root', // 账号
password: 'cherry114514', // 密码
host: 'localhost', // host
port: 3306, // 端口
database: 'nest', // 数据库名
// entities: [__dirname + '/**/*.entity{.ts,.js}'], // 实体文件
synchronize: true, //是否自动将实体类同步到数据库,生产环境尽量不使用,可能出现问题,开发环境可以
retryDelay: 500, // 重试连接数据库时间间隔
retryAttempts: 10, //重试连接数据库次数
autoLoadEntities: true, // 是否自动加载实体,forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中
}),
TestModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

在Entities中定义实体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

// 定义一个实体
@Entity()
export class Test {
// 定义一个自增列
@PrimaryGeneratedColumn()
id: number;

// 定义一个列
@Column()
name: string;

@Column()
password: string;

@Column()
age: number;
}

在对应的Module中关联实体:

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Module } from '@nestjs/common';
import { TestService } from './test.service';
import { TestController } from './test.controller';
import { Test } from '@nestjs/testing';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
// 使模块关联实体
imports: [TypeOrmModule.forFeature([Test])],
controllers: [TestController],
providers: [TestService],
})
export class TestModule {}