主题
数据库
Nest 与数据库无关,这里使用官网文档中的 TypeORM 和 mysql2
准备工作
安装依赖
shell
npm install --save @nestjs/typeorm typeorm mysql2完成数据库配置
创建 config/database.config.ts
ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export default {
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'abcdefg@123456',
database: 'a-project',
synchronize: true,
autoLoadEntities: true,
} as TypeOrmModuleOptions;引入
在 app.module.ts 中引入
ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Modules } from './modules/index.module';
import { ConfigModule } from '@nestjs/config';
import configuration from './config/configuration';
import { TypeOrmModule } from '@nestjs/typeorm';
import databaseConfig from './config/database.config';
@Module({
imports: [
Modules,
ConfigModule.forRoot(configuration),
TypeOrmModule.forRoot(databaseConfig),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}使用
定义实体
entities/user.entity.ts
ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}在 user.service.ts 中使用
user.service.ts
ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: number): Promise<User | null> {
return this.usersRepository.findOneBy({ id });
}
async remove(id: number): Promise<void> {
await this.usersRepository.delete(id);
}
}TypeOrm 事务
引入
user.service.ts
ts
@Injectable()
export class UserService {
constructor(private dataSource: DataSource) {}
}使用
完全控制
ts
async createMany(users: User[]) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
await queryRunner.manager.save(users[0]);
await queryRunner.manager.save(users[1]);
await queryRunner.commitTransaction();
} catch (err) {
// since we have errors lets rollback the changes we made
await queryRunner.rollbackTransaction();
} finally {
// you need to release a queryRunner which was manually instantiated
await queryRunner.release();
}
}另外一种使用方法
ts
async createMany(users: User[]) {
await this.dataSource.transaction(async manager => {
await manager.save(users[0]);
await manager.save(users[1]);
});
}
