返回

在 Nest.js 中使用 TypeORM 连接 MySQL 数据库

前端

在现代Web开发中,数据库是不可或缺的一部分,它为应用程序提供了持久化存储数据的能力。在Nest.js中,我们可以使用TypeORM作为对象关系映射器(ORM)来连接和操作数据库。TypeORM是一个功能强大的ORM,它支持多种数据库,包括MySQL、PostgreSQL、SQLite等。

定义实体

首先,我们需要定义实体来表示数据库中的表。实体是TypeScript类,它包含了表的字段和方法。例如,我们可以定义一个名为“User”的实体,如下所示:

import {Entity, Column, PrimaryGeneratedColumn} from "typeorm";

@Entity()
export class User {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;

}

连接数据库

接下来,我们需要连接到数据库。在Nest.js中,我们可以通过在模块中导入TypeORMModule并配置数据库连接选项来实现。例如,对于MySQL数据库,我们可以使用以下配置:

import {Module} from "@nestjs/common";
import {TypeOrmModule} from "@nestjs/typeorm";

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'nest_db',
      entities: [User],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

使用存储库进行 CRUD 操作

TypeORM提供了存储库来进行CRUD(创建、读取、更新、删除)操作。存储库是实体的抽象,它提供了对数据库的访问。我们可以通过在服务中注入存储库来使用它。例如,我们可以使用以下代码在UserService中创建用户:

import {Injectable} from "@nestjs/common";
import {InjectRepository} from "@nestjs/typeorm";
import {UserRepository} from "./user.repository";
import {User} from "./user.entity";

@Injectable()
export class UserService {

  constructor(
    @InjectRepository(UserRepository)
    private userRepository: UserRepository,
  ) {}

  async createUser(name: string, email: string): Promise<User> {
    const user = new User();
    user.name = name;
    user.email = email;
    return await this.userRepository.save(user);
  }

}

总结

在本文中,我们介绍了如何在Nest.js中使用TypeORM连接和使用MySQL数据库,包括如何定义实体、连接数据库和使用存储库进行CRUD操作。希望本文对您有所帮助。