使用 Nest 和 TypeORM 来做第一个增删改查

505 阅读1分钟
  • 安装必要的依赖:使用 npm 或 yarn 安装 @nestjs/typeorm 和 typeorm 等依赖。
pnpm i @nestjs/typeorm typeorm mysql2 
  • 配置 TypeORM:在 app.module.ts 中配置 TypeORM,指定数据库的连接信息、实体类和同步选项。

import { TypeOrmModule } from '@nestjs/typeorm';

    TypeOrmModule.forRoot({
      type: 'mysql', //数据库类型
      username: 'root', //账号
      password: 'root', //密码
      host: 'localhost', //host
      port: 3306, //
      database: 'nestdemo1', //库名
      entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件
      synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库
      retryDelay: 500, //重试连接数据库间隔
      retryAttempts: 10, //重试连接数据库的次数
      autoLoadEntities: true, //如果为true,将自动加载实体 forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中
    }),
  • 创建实体类:定义实体类,使用 TypeORM 的装饰器来标记实体类和属性。
import { InjectRepository } from '@nestjs/typeorm';
import { Like, Repository } from 'typeorm';
import { User } from './entities/user.entity';

//  user.entity.ts
import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
} from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @CreateDateColumn()
  createtime: Date;

  @Column()
  desc: string;
}


  • 创建 Service:使用 Nest 的 Injectable 装饰器来创建 Service 类,使用 InjectRepository 装饰器将 Repository 注入到 Service 中,实现对实体的增删改查操作。
// 在服务的构造函数中引入实体类
  constructor(
    @InjectRepository(User) private readonly user: Repository<User>,
  ) {}

//查询全部  分页/模糊查询
  async findAll(query: { keyWord: string; page: number; pageSize: number }) {
    const res = await this.user.find({
      // Like 方法进行模糊匹配
      where: {
        name: Like(`%${query.keyWord}%`),
      },
      // 降序排列
      order: {
        id: 'DESC',
      },
      // skip 表示跳过前面的数据
      skip: (query.page - 1) * query.pageSize,
      // 需要查询的数据条数
      take: query.pageSize,
    });
    
    const total = await this.user.count({
      // Like 方法进行模糊匹配
      where: {
        name: Like(`%${query.keyWord}%`),
      },
    });

    return { data: res, total };
  }
  
  //增加
    create(createUserDto: CreateUserDto) {
    const data = new User();
    data.name = createUserDto.name;
    data.desc = createUserDto.desc;
    return this.user.save(data);
  }
  
  // 更新
   update(id: number, updateUserDto: UpdateUserDto) {
    return this.user.update(id, updateUserDto)
  }
 
  // 删除
  remove(id: number) {
    return this.user.delete(id)
  }


  • 创建 Controller:使用 Nest 的 Controller 装饰器来创建 Controller 类,定义路由和方法,调用 Service 中的方法来实现对实体的增删改查操作

  • 测试 API:使用 Postman 或其他 HTTP 客户端来测试 API,确保实体的增删改查操作正常。