TypeOrm+Nest.js分页处理(含GROUP BY分组查询)

/** * queryBuilder分页查询 * @param pageHelper * @param pageHelper.getRayMany 是否需要实体之外的参数 * @param queryBuilder */ public async findByPage(queryBuilder: SelectQueryBuilder<any>, pageHelper?: { getRayMany?: boolean; pageNum?: number; pa..
摘要由CSDN通过智能技术生成

说明:该代码为已经过测试的生产环境代码
若有所帮助,望君轻轻一点,手有余香

import {
    RpcException } from '@nestjs/microservices';
import {
    EntityManager, getManager, SelectQueryBuilder } from 'typeorm';

/*
 * @Author: Horace
 * @Date: 2019-08-30 14:21:12
 * @Last Modified by: Horace
 * @Last Modified time: 2019-08-30 14:21:12
 */
export class Pagination {
   
  // @IsNotEmpty()
  // @ApiModelProperty({ description: "页码", type: "number", example: 1 })
  private pageNum: number;
  // @IsNotEmpty()
  // @ApiModelProperty({ description: "一页显示条数", type: "number", example: 10 })
  private pageSize: number;
  // @ApiModelProperty({ description: "总页数", type: "number", example: 10 })
  private totalNum: number;
  // @ApiModelProperty({ description: "总条数", type: "number", example: 10 })
  private totalRows: number;
  // @ApiModelProperty({ description: "数据" })
  public data?: any[];

  public get _pageNum(): number {
   
    return this.pageNum;
  }

  public set _pageNum(param: number) {
   
    if (param <= 0) {
   
      param = 1;
    }
    // if (param > this._totalNum) {
   
    //     param = this._totalNum;
    // }
    this.pageNum = param;
  }

  public get _pageSize() {
   
    return this.pageSize;
  }

  public set _pageSize(param: number) {
   
    this.pageSize = param;
  }

  public get _totalRows() {
   
    return this.totalRows;
  }

  public set _totalRows(param: number) {
   
    this.totalRows = param;
  }

  // @ApiModelProperty({ description: "总页数", type: "number", example: 10 })
  public get _totalNum
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS中使用TypeORM进行分页查询的步骤如下: 1. 首先,在你的DAO或Repository文件中使用`InjectRepository`注入Repository: ```typescript @Injectable() export class TicketDao { constructor( @InjectRepository(TicketEntity) private readonly ticketRepo: Repository<TicketEntity> ) {} } ``` 2. 在`async filterAndPageQuery()`方法中创建一个queryBuilder: ```typescript async filterAndPageQuery() { let qb = this.ticketRepo.createQueryBuilder('ticket'); // 在qb中可以写下面的条件筛选和分页查询代码 // 接下来的 qb.xxx 都是使用 QueryBuilder 的增删查改操作 } ``` 3. 使用`skip`和`take`方法实现分页查询: ```typescript qb = qb .skip(pageParam.pageSize * (pageParam.current - 1)) .take(pageParam.pageSize); ``` 其中,`skip`方法用于设置跳过的条数,`take`方法用于限制查询的条数。 4. 获取查询结果及查询结果总数: ```typescript return await qb.getManyAndCount(); ``` 或者,如果你只需要查询结果而不需要总数,可以使用`.getMany()`方法。 以上是使用NestJSTypeORM进行分页查询的基本步骤。你可以根据实际需求进行相应的修改和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [nestjs typeorm 条件筛选、排序、分页 常见查询功能的实现](https://blog.csdn.net/landiyaaa/article/details/104730677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值