【nest.js_03】nest.js+typeorm 简单实现一个查询

本项目数据持久化的方案选择 mysql 来进行演示

mysql 的安装,启用,配置,已经数据库的创建不在本文考虑范围内

默认已经有一个可以连接的数据库 nest_db, 将以一个 user 表为例展示 typeorm

新建模块

新建 user 模块,我们都放在 logical 下

nest g mo user logical
nest g s user logical --no-spec
nest g co user logical --no-spec

安装依赖包

yarn add @nestjs/typeorm typeorm mysql

新建实体

新建 entities\user\User.entity.ts entity 文件

我们将放在 entities 下 ,以下是一个简单实例,定义四个字段 至于更多的实体文档看这typeorm

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

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

  @Column({ length: 50 })
  name: string;

  @CreateDateColumn()
  create_at: number;

  @UpdateDateColumn()
  update_at: number;
}

修改 app.module.ts 配置数据库连接

这里就用到了上一篇配置的密码端口号等

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

// other
@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => {
        return {
          type: configService.dbType,
          host: configService.dbHost,
          port: configService.dbPort,
          username: configService.dbUser,
          password: configService.dbPwd,
          database: configService.dbDb,
          entities: [User, Auth, Notepad, NotepadType],
          synchronize: true,
        } as TypeOrmModuleAsyncOptions;
      },
    }),
    ConfigModule,
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
//other

/logical/user/user.controller.ts

新增一个路由,让 service 处理数据

import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  /**
   * 获取账号列表
   */
  @Get()
  async getList() {
    // 参数将再此获取,并调用具体逻辑处理代码,然后处理返回
    return this.userService.getList();
  }
}

/logical/user/user.module.ts

此处仅仅联系了实体和 service、controller

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

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  controllers: [UserController],
  exports: [UserService],
})
export class UserModule {}

/logical/user/user.service.ts

演示了 typeorm 查询能力 querybuild

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

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
  ) {}
  /**
   * 账号列表业务逻辑处理
   */
  async getList(): Promise<any> {
    // QueryBuilder是 TypeORM 最强大的功能之一 ,它允许你使用优雅便捷的语法构建 SQL 查询,执行并获得自动转换的实体
    const qb = this.userRepository.createQueryBuilder('user');
    const data = await qb.getMany();
    return data;
  }
}

总结

仅需上述几个步骤,我们就实现了一个查询所有用户的接口,至于更多的关于 typeorm 相关的 api,肯定是需要查考文档的,它同样可以写原生的 sql,但一般而言,typeorm 提供的 api 已经足够使用,并且因为本质仍然是 sql,你也可以使用 getSql 获取生成的 sql 查询语句

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值