NestJS连接MySQL数据库2 -- Typeorm

注:我们按照上一章已结连接到数据库了,这里先简单创建一个表,先熟悉CRUD的写法。

1、创建实体类

src目录下创建一个entities目录,在entities目录下创建一个user.entity.ts实体类

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

// 装饰器
@Entity()
export class User{

    //自增主键装饰器
    @PrimaryGeneratedColumn()
    id:number;

    @Column()
    name:string;

    @Column()
    password:string;

}

注:实体类都要有一个主键属性

2、映射实体类到数据库

在app.module中引入实体类

import { User } from './entities/user.entity';

在TypeOrmModule中的entities属性注册

TypeOrmModule.forRootAsync({
      imports:[ConfigModule],
      inject:[ConfigService],
      useFactory: (configService:ConfigService)=>
      ({
        type:configService.get(EnumConfig.DB_TYPE),
        host: configService.get(EnumConfig.DB_HOST),
        port:configService.get(EnumConfig.DB_PORT),
        username: configService.get(EnumConfig.DB_USERNAME),
        password: configService.get(EnumConfig.DB_PASSWORD),
        database: configService.get(EnumConfig.DB_DATABASE),
        timezone: 'UTC',
        charset: 'utf8mb4',
        entities:[User],
        synchronize:configService.get(EnumConfig.DB_SYNC),
        logging:process.env.NODE_ENV === 'development'
      } as TypeOrmModuleAsyncOptions)
    })

启动服务,此时数据库就映射到这个表

3、创建实体类模块

使用命令行创建模块

nest g mo user//创建user.module

nest g s user//创建user.service

nest g co user //创建user.controller

在module文件内引入需要使用的表

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { User } from 'src/entities/user.entity';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  // 引入需要使用的实体
  imports:[TypeOrmModule.forFeature([User])],
  providers: [UserService],
  controllers: [UserController]
})
export class UserModule {}

service文件中,在构造函数中注入依赖

 constructor( 
        @InjectRepository(User) private readonly userRepository:Repository<User>
    ){}

注:使用 @InjectRepository() 装饰器,你可以将 repository 作为一个依赖项注入到你的服务(Service)或控制器(Controller)中。这使得你可以在 NestJS 模块中方便地访问和操作数据库。Repository 是 TypeORM 中的一个核心概念,它提供了一种与数据库表交互的方法,包括执行 CRUD 操作。

4、引入接口文档swagger

安装swagger

npm install  @nestjs/swagger swagger-ui-express

mian.ts文件中引入

  const docOptions = new DocumentBuilder().setTitle('STUDY_DOC').setDescription('沉迷学习无法自拔').setVersion('1').build()
  const document = SwaggerModule.createDocument(app,docOptions)
//设置访问路径
  SwaggerModule.setup('/api-docs',app,document)

配置分区,使用ApiTags

@Controller('user')
@ApiTags('User')
export class UserController {
    constructor(
        private readonly userService:UserService
    ){}
....

配置接口描述

@Get()
    @ApiOperation({description:"查询所有用户"})
    async queryUser(){
        return await this.userService.readUsers()
    }

启动服务,访问文档

5、CRUD

src下添加一个interface目录,添加一个接口user.interface.ts

export interface UserInterface{
    id?:number;
    name:string;
    password:string;
}

添加

//service
async createUser(data:UserInterface){
        const user = new User();
        user.name = data.name;
        user.password = data.password
        return await this.userRepository.save(user)
    }


//controller
 @Get('add')
    @ApiOperation({description:"添加一个用户"})
    async addUser(){
        let data = {name:'xue',password:'xue'}
        return await this.userService.createUser(data);
    }

查询

//service
    async readUsers(){
        return await this.userRepository.find();
    }


//controller
    @Get()
    @ApiOperation({description:"查询所有用户"})
    async queryUser(){
        return await this.userService.readUsers()
    }

修改

//service
      async updatedUser(id:number,data:UserInterface) {
        const user = new User();
        user.name = data.name;
        user.password = data.password;
        user.id =id;
        return await this.userRepository.save(user)
    }

//controller
   @Get('update/:id')
    @ApiOperation({description:"修改用户"})
    async updatedUser(@Param('id') id) {
        let data = {name:'xue1',password:'xue2'}
        return this.userService.updatedUser(id,data)
    }

删除

//service
      async deleteUser(id:number){
        return await this.userRepository.delete(id)
    }


//controller
  @Get('del/:id')
    @ApiOperation({description:"删除一个用户"})
    async moveUser(@Param('id') id){
        return this.userService.deleteUser(id)
    }

6、完整代码

user.module

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { User } from 'src/entities/user.entity';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  // 引入需要使用的实体
  imports:[TypeOrmModule.forFeature([User])],
  providers: [UserService],
  controllers: [UserController]
})
export class UserModule {}

user.service

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from 'src/entities/user.entity';
import { UserInterface } from 'src/interface/user.interface';
import { Repository } from 'typeorm';

@Injectable()
export class UserService {
    constructor( 
        @InjectRepository(User) private readonly userRepository:Repository<User>
    ){}

    // create
    async createUser(data:UserInterface){
        const user = new User();
        user.name = data.name;
        user.password = data.password
        return await this.userRepository.save(user)
    }

    // read
    async readUsers(){
        return await this.userRepository.find();
    }

    // update
    async updatedUser(id:number,data:UserInterface) {
        const user = new User();
        user.name = data.name;
        user.password = data.password;
        user.id =id;
        return await this.userRepository.save(user)
    }

    // delete
    async deleteUser(id:number){
        return await this.userRepository.delete(id)
    }

}

user.controller

import { Controller, Get, Param, Post } from '@nestjs/common';
import { ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger';
import { UserService } from './user.service';

@Controller('user')
@ApiTags('User')
export class UserController {
    constructor(
        private readonly userService:UserService
    ){}

    @Get()
    @ApiOperation({description:"查询所有用户"})
    async queryUser(){
        return await this.userService.readUsers()
    }

    @Get('add')
    @ApiOperation({description:"添加一个用户"})
    async addUser(){
        let data = {name:'xue',password:'xue'}
        return await this.userService.createUser(data);
    }

    @Get('update/:id')
    @ApiOperation({description:"修改用户"})
    async updatedUser(@Param('id') id) {
        let data = {name:'xue1',password:'xue2'}
        return this.userService.updatedUser(id,data)
    }

    @Get('del/:id')
    @ApiOperation({description:"删除一个用户"})
    async moveUser(@Param('id') id){
        return this.userService.deleteUser(id)
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值