连接MySQL,实现一个简单的增删改查功能

前面几章我们讲了项目的初始,连接MySQL,这章我们主要实现增删改查接口,在src下新建user文件夹,我们的所有功能都写在这个文件夹下。

1 新建entity

项目开始配置连接数据库的时候,我们 synchronize 选择的事true,即使我们库里没有表,通过entity也可以自动生成表

import { Column, Entity, PrimaryGeneratedColumn, BaseEntity } from 'typeorm';/** * 列选项参考 * https://typeorm.biunav.com/zh/entities.html#%E5%88%97%E9%80%89%E9%A1%B9 **/@Entity()export class User extends BaseEntity {  @PrimaryGeneratedColumn()  id: number;  @Column({ type: 'varchar', name: 'name', comment: '用户名' })  name: string;  @Column({ type: 'varchar', name: 'nickname', comment: '昵称' })  nickname: string;  @Column({ type: 'varchar', name: 'password', comment: '密码' })  password: string;  @Column({ type: 'varchar', length: 11, name: 'mobile', comment: '手机号' })  mobile: string;  @Column({ type: 'varchar', nullable: true, name: 'avatar', comment: '头像' })  avatar: string;  @Column({ type: 'varchar', default: '未知', name: 'gender', comment: '性别' })  gender: string;  @Column({    type: 'varchar',    default: '普通会员',    name: 'user_level',    comment: '用户级别',  })  userLevel: string;  @Column({    type: 'varchar',    nullable: true,    name: 'province',    comment: '省份',  })  province: string;  @Column({ type: 'varchar', nullable: true, name: 'city', comment: '城市' })  city: string;  @Column({ type: 'datetime', nullable: true, name: 'create_time' })  createTime: number;  @Column({ type: 'datetime', nullable: true, name: 'update_time' })  updateTime: number;}

上面的内容定义的是表的字段及字段类型等

2 新建controller

这里定义了四个路由,全部为post请求方式

import { ApiTags, ApiParam, ApiQuery, ApiHeader } from '@nestjs/swagger';import { Controller, Get, Post, Body, Logger } from '@nestjs/common';import { UserService } from './user.service';import { QueryUserDto } from './Dto/queryUser.dto';import { AddUserDto } from './Dto/addUser.dto';import { UpdateUserDto } from './Dto/updateUser.dto';import { DeleteUserDto } from './Dto/deleteUser.dto';/** * * @author lidonghui * @version 1 * @date 2021/01/18 09:57 */@ApiTags('用户管理')@Controller('user')export class UserController {  constructor(private readonly userService: UserService) {}  /**   * 用户管理-分页查询   */  @ApiQuery({    name: 'name',    description: '用户名',  })  @Post('/page')  findAll(@Body() queryUserDto: QueryUserDto): Promise<{}> {    Logger.log(`分页查询接收参数:${JSON.stringify(queryUserDto)}`);    return this.userService.pageQuery(queryUserDto);  }  /**   * 用户管理-增加用户   */  @Post('/add')  addUser(@Body() addUserDto: AddUserDto): Promise<boolean> {    Logger.log(`增加用户接收参数:${JSON.stringify(addUserDto)}`);    return this.userService.save(addUserDto);  }  /**   * 用户管理-编辑用户   */  @Post('/edit')  updateUser(@Body() updateUserDto: UpdateUserDto): Promise<boolean> {    Logger.log(`编辑用户接收参数:${JSON.stringify(updateUserDto)}`);    return this.userService.save(updateUserDto);  }  /**   * 用户管理-删除用户   */  @Post('/delete')  deleteUser(@Body() deleteUserDto: DeleteUserDto): Promise<boolean> {    Logger.log(`删除用户接收参数:${JSON.stringify(deleteUserDto)}`);    return this.userService.delete(deleteUserDto);  }}

3 新建service

这里主要的实现是对库的操作,这里面就包含了增删改查

import { Injectable, Logger } from '@nestjs/common';import { InjectRepository } from '@nestjs/typeorm';import { Repository } from 'typeorm';import { User } from './user.entity';@Injectable()export class UserService {  constructor(    @InjectRepository(User)    private readonly UserRepository: Repository<User>,  ) {}  private readonly User: User[] = [];  // 分页查询  async pageQuery(parameter: any): Promise<any> {    Logger.log(`请求参数:${JSON.stringify(parameter)}`);    // 定义返回格式    let result = {      pageNo: Number(parameter.pageNo),      pageSize: Number(parameter.pageSize),      totalPage: 0,      totalRows: 0,      rows: [],    };    // 返回条数    let SQLwhere: any = {};    if (parameter.name != undefined) {      SQLwhere.name = parameter.name;    }    result.rows = await this.UserRepository.find({      where: SQLwhere,      order: {        id: 'DESC',      },      skip: (parameter.pageNo - 1) * Number(parameter.pageSize), // 分页,跳过几项      take: parameter.pageSize, // 分页,取几项      cache: true,    });    // 总条数    result.totalRows = await this.UserRepository.count();    // 总页数    result.totalPage = Math.ceil(      (await this.UserRepository.count()) / parameter.pageSize,    );    return result;  }  // 增加/更新  async save(parameter: any): Promise<boolean> {    Logger.log(`请求参数:${JSON.stringify(parameter)}`);    try {      let a = await this.UserRepository.save(parameter);      return true;    } catch (error) {      Logger.log(`请求失败:${JSON.stringify(error)}`);      return false;    }  }  // 删除  async delete(ids: any): Promise<boolean> {    Logger.log(`请求参数:${JSON.stringify(ids)}`);    try {      let a = await this.UserRepository.delete(ids.id);      Logger.log(`删除返回数据:${JSON.stringify(a)}`);      if (a.affected == 0) {        return false;      } else {        return true;      }    } catch (error) {      return false;    }  }}

4 新建module

import { Module } from '@nestjs/common';import { UserService } from './user.service';import { UserController } from './user.controller';import { TypeOrmModule } from '@nestjs/typeorm';import { User } from './user.entity';@Module({  imports: [TypeOrmModule.forFeature([User])],  providers: [UserService],  controllers: [UserController],})export class UserModule {}

5 新建Dto

Dto文件夹有四个文件,分别为addUser.dto.ts、deleteUser.dto.ts、queryUser.dto.ts和updateUser.dto.ts,这四个是查询及验证使用

1 addUser.dto.tsimport { ApiProperty } from '@nestjs/swagger';import { IsNotEmpty } from 'class-validator';export class AddUserDto {  @ApiProperty()  @IsNotEmpty({ message: '用户名不为空' })  readonly name: string;  @ApiProperty()  @IsNotEmpty({ message: '昵称不为空' })  readonly nickname: string;  @ApiProperty()  @IsNotEmpty({ message: '密码不为空' })  readonly password: string;  @ApiProperty()  @IsNotEmpty({ message: '手机号不为空' })  readonly mobile: string;  @ApiProperty()  readonly avatar: string;  @ApiProperty()  readonly gender: string;  @ApiProperty()  readonly userLevel: string;  @ApiProperty()  readonly province: string;  @ApiProperty()  readonly city: string;}2 deleteUser.dto.tsimport { ApiProperty } from '@nestjs/swagger';import { IsNotEmpty, IsInt } from 'class-validator';export class DeleteUserDto {  @ApiProperty()  @IsInt({ message: 'id应为数字' })  @IsNotEmpty({ message: 'id不为空' })  readonly id: number;}3 queryUser.dto.tsimport { ApiProperty } from '@nestjs/swagger';import { IsNotEmpty, Min, IsInt } from 'class-validator';export class QueryUserDto {  @ApiProperty()  readonly name: string;  @ApiProperty()  @Min(1, { message: '分页不能小于1' })  @IsInt({ message: '分页应为数字' })  @IsNotEmpty({ message: '分页不能为空' })  readonly pageNo: number;  @ApiProperty()  @Min(1, { message: '分页条数不能小于1' })  @IsInt({ message: '分页条数应为数字' })  @IsNotEmpty({ message: '分页条数不能为空' })  readonly pageSize: number;}4 updateUser.dto.tsimport { ApiProperty } from '@nestjs/swagger';import { IsNotEmpty, IsInt } from 'class-validator';export class UpdateUserDto {  @ApiProperty()  @IsInt({ message: 'id应为数字' })  @IsNotEmpty({ message: 'id不为空' })  readonly id: number;  @ApiProperty()  readonly name: string;  @ApiProperty()  readonly nickname: string;  @ApiProperty()  readonly password: string;  @ApiProperty()  readonly mobile: string;  @ApiProperty()  readonly avatar: string;  @ApiProperty()  readonly gender: string;  @ApiProperty()  readonly userLevel: string;  @ApiProperty()  readonly province: string;  @ApiProperty()  readonly city: string;}

6 运行项目

上面的是全部的配置,主要因为是此项目没有开源,所以代码全部复制,基本能运行。最后结果

©著作权归作者所有:来自51CTO博客作者mb5fd86dae5fbf6的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. JavaScript 中 call()、apply()、bind() 的用法
  2. 【Nest教程】Nest项目用户密码加密
  3. C#中方法的调用
  4. C++入门
  5. Elastic开源协议改了,用户怎么办?
  6. 通配符、用户组管理与文件权限
  7. 剩余参数与参数引用及回调函数:array_map(), array_filter,array_
  8. jvm的那些设置参数你都知道吗
  9. 支持向量机SVM原理(参数解读和python脚本)

随机推荐

  1. java SSH员工管理系统以及Demo代码下载
  2. 做一个没有视图的零食吧?
  3. Spring Security的permitAll对某些端点不
  4. java i/o输入输出流
  5. JavaScript权威设计--jQuery,Ajax.animat
  6. 如何在命令中传递对象参数?
  7. Java中的两种XML解析技术DOM和SAX
  8. 云星数据---Apache Flink实战系列(精品版
  9. 正在学习C#的新手请教:ASP.NET、HTML5, ja
  10. java 中 数值不超过3万. 用short好 还是i