nest.js连接mysql数据库

一、加载mysql2、typeorm、@nestjs/typeorm

为什么使用三个插件?

typeorm 是一个 TypeScript ORM(对象关系映射)框架,它提供了一种将对象模型映射到关系型数据库中的方法,以及提供了对 SQL 和 NoSQL 数据库的支持。同时,typeorm 还提供了一些高级特性,如事务处理、缓存、延迟加载等功能,使开发者可以更加方便地进行数据库操作。
@nestjs/typeorm 是基于 typeorm 的一个 Nest.js 模块,它提供了一种将 typeorm 集成到 Nest.js 应用中的方法。通过使用 @nestjs/typeorm,开发者可以在 Nest.js 应用中更加方便地使用 typeorm 进行数据库操作。
mysql2 是 MySQL 数据库的 Node.js 驱动程序,它提供了一种与 MySQL 数据库进行交互的方法。通过使用 mysql2,开发者可以在 Node.js 应用中访问 MySQL 数据库。
因此,typeorm 和 @nestjs/typeorm 都是用来方便开发者对数据库的操作,而 mysql2 则是提供了访问 MySQL 数据库的方法。在 Nest.js 应用中,一般会使用 @nestjs/typeorm 集成 typeorm 并使用 mysql2 作为 typeorm 的驱动程序,简单来说@nestjs/typeorm依赖typeorm,typeorm依赖 mysql2 ,缺一不可

当然也可以直接使用mysql2进行链接数据库。

npm install --save @nestjs/typeorm typeorm mysql2

二、创建数据库实体类./user.entity文件
在 Nest.js 应用中,需要创建实体类来映射数据库中的表。
@PrimaryGeneratedColumn() 是 typeorm 模块提供的一个装饰器,用于指定实体类中的主键,并且生成主键的值是由数据库生成的自增长数值。在一个实体类中,通常需要指定一个或多个属性作为主键,以标识实体类的唯一性。使用 @PrimaryGeneratedColumn() 装饰器可以将一个属性设置为自动生成的主键。
可以在 src 目录下创建一个 user.entity.ts 文件,并添加以下内容:
在代码中,@PrimaryGeneratedColumn() 装饰器指定了 id 属性为主键,并且生成主键的值是由数据库生成的自增长数值。当插入一条新的用户数据时,数据库会自动为该用户生成一个新的自增长 id 值。

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


@Entity()
export class User {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  password: string;
}

三、创建数据库服务
下面以app.module.ts文件为示例
这里使用了 TypeOrmModule.forRoot()和TypeOrmModule.forFeature(),这两个方法缺一不可。
TypeOrmModule.forRoot() 方法用于创建数据库连接,并指定连接的参数、实体类、自动同步等选项。这个方法应该在应用程序的根模块(AppModule)中使用,并且只需要调用一次。

TypeOrmModule.forFeature() 方法用于注册需要在本模块中使用的实体类。这个方法可以在任何模块中使用。
一个是连接一个是注册。

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost', // 服务器地址
      port: 3306, // 端口号
      username: '', // 数据库用户名
      password: '', // 数据库密码
      database: 'test', // 数据库名
      entities: [User], // 实体类
      synchronize: true, // 自动同步数据库结构
    }),
    TypeOrmModule.forFeature([User]), // 注册实体类
  ],
})
export class AppModule {}

四、进行数据库查询

import { Body, Controller, Get, Post, Req, Res,Param } from "@nestjs/common";
import { Repository } from 'typeorm';
import { User } from '../entities/login.entity';
import { InjectRepository } from '@nestjs/typeorm';

@Controller("login")
export class LoginController {
  constructor( 
    @InjectRepository(User)
    private readonly userRepository: Repository<User>
  ) {}
	//保存
  @Post('save')
  async createUser(@Body() user: User): Promise<User> {
    console.log(user)
    return await this.userRepository.save(user);
  }
  //查找全部
  @Get('findAll')
  async findAll(): Promise<User[]> {
    return await this.userRepository.find();
  }
  //查找某一条
  @Get('findOne')
  async findOne(@Param('id') id: number): Promise<User> {
    return await this.userRepository.findOneBy({
      id: id // where id is your column name
    });
  }
  //更新
  @Post('update')
  async update(@Body() userData: User): Promise<User> {
    const data = new User();
    data.name = userData.name;
    data.password = userData.password;
    await this.userRepository.update(userData.id, data);
    return await this.userRepository.findOneBy({
      id: userData.id // where id is your column name
    });
  }
  //删除
  @Post('delete')
  async delete(@Body() userData: User): Promise<void> {
    await this.userRepository.delete(userData.id);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言只 石皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值