如何在nest中使用typeorm

安装相关依赖

1
pnpm install @nestjs/typeorm typeorm mysql2 -S

创建测试 entity

1
nest g resource user

修改 entity user 的属性

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

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

@Column({
length: 50,
})
name: string;
}

在入口app.module中添加 typeOrmModule 模块

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
28
29
30
31
32
33
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
imports: [
UserModule,
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'typeorm_mysql',
synchronize: true, // 没有的表情况是否同步创建
logging: true,
entities: ['./**/entities/*.ts'], // 关联的实体类
poolSize: 10, // 数据库连接池的最大数量
migrations: [],
subscribers: [],
connectorPackage: 'mysql2', // 驱动包
extra: { // 发送给驱动包的参数
authPlugin: 'sha256_password',
},
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

在对应的实体service中实现CURD

  • 注入entityManager的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// user.service.ts

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectEntityManager } from '@nestjs/typeorm';
import { EntityManager } from 'typeorm';
import { User } from './entities/user.entity';

@Injectable()
export class UserService {
// 注入entityManager
@InjectEntityManager()
private manager: EntityManager;

create(createUserDto: CreateUserDto) {
this.manager.save(User, createUserDto);
}

}
  • 注入 Repository 的方式
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
28
29
30
31
32
33
// user.module.ts
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { User } from './entities/user.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}


// user.service.ts
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { EntityManager, Repository } from 'typeorm';
import { User } from './entities/user.entity';

@Injectable()
export class UserService {
// 注入Repository
@InjectRepository(User)
private userRepository: Repository<User>;

findAll() {
return this.userRepository.find();
}
}


如何在nest中使用typeorm
https://avatar0813.github.io/2023/06/25/nest/如何在nest中使用typeorm/
作者
avatar
发布于
2023年6月25日
许可协议