最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NEST.JS框架中TypeORM的安裝和使用教程

 更新時(shí)間:2025年11月22日 15:06:35   作者:江城開(kāi)朗的豌豆  
本文介紹了Nest.js框架及TypeORM的使用,包括環(huán)境準(zhǔn)備、安裝步驟、TypeORM的基本查詢方法、查詢構(gòu)建器以及在實(shí)際業(yè)務(wù)中的應(yīng)用

前言

Nest是構(gòu)建高效可擴(kuò)展的 Node.js Web 應(yīng)用程序的框架。 默認(rèn)使用JavaScript的超集TypeScript進(jìn)行開(kāi)發(fā)。

環(huán)境準(zhǔn)備

查看node和npm版本:

$ node --version
v10.11.0
$ npm --version
6.5.0

安裝@nestjs/cli

使用npm全局安裝@nestjs/cli:

$ npm i -g @nestjs/cli
/usr/local/bin/nest -> /usr/local/lib/node_modules/@nestjs/cli/bin/nest.js
+ @nestjs/cli@5.7.1
added 11 packages from 6 contributors, 
removed 27 packages and updated 12 packages in 10.322s

使用nest --version命令查看nest當(dāng)前版本:

$ nest --version
5.7.1

TypeORM安裝

TypeORM無(wú)疑是 node.js 世界中最成熟的對(duì)象關(guān)系映射器(ORM )。由于它是用 TypeScript 編寫的,所以它在 Nest 框架下運(yùn)行得非常好

npm install typeorm reflect-metadata @types/node
# 安裝數(shù)據(jù)庫(kù)驅(qū)動(dòng)
npm install mysql2  # MySQL
npm install pg     # PostgreSQL

TypeORM 中常用的數(shù)據(jù)庫(kù)查詢方法

1.count()- 計(jì)數(shù)方法

基本用法

// 統(tǒng)計(jì)所有記錄
const total = await repository.count();

// 帶條件的統(tǒng)計(jì)
const completedCount = await repository.count({
  where: { completed: true }
});

// 多個(gè)條件
const count = await repository.count({
  where: { 
    status: 'pending',
    userId: 1
  }
});

2.find()- 查詢多條記錄

基本查詢

// 查詢所有記錄
const allRecords = await repository.find();

// 帶條件查詢
const pendingRecords = await repository.find({
  where: { status: 'pending' }
});

// 多個(gè)條件(AND)
const records = await repository.find({
  where: { 
    status: 'pending',
    userId: 1
  }
});

// 或條件(OR)
const records = await repository.find({
  where: [
    { status: 'pending' },
    { status: 'in-progress' }
  ]
});

復(fù)雜查詢選項(xiàng)

const records = await repository.find({
  select: ['id', 'title', 'createdAt'],  // 選擇特定字段
  where: { status: 'pending' },
  order: { createdAt: 'DESC' },          // 排序
  skip: 10,                              // 跳過(guò)前10條
  take: 20,                              // 取20條
  relations: ['images', 'user']          // 關(guān)聯(lián)查詢
});

3.findOne()- 查詢單條記錄

// 按ID查詢
const record = await repository.findOne(1);

// 按條件查詢
const record = await repository.findOne({
  where: { title: '特定標(biāo)題' }
});

// 帶關(guān)聯(lián)查詢
const record = await repository.findOne({
  where: { id: 1 },
  relations: ['images', 'user'],
  select: ['id', 'title', 'description']
});

4.findAndCount()- 查詢并計(jì)數(shù)

// 分頁(yè)查詢,同時(shí)返回?cái)?shù)據(jù)和總數(shù)
const [records, totalCount] = await repository.findAndCount({
  where: { status: 'pending' },
  skip: 0,
  take: 10,
  order: { createdAt: 'DESC' }
});

// 返回結(jié)果:{ records: [...], total: 100 }

5.create()和save()- 創(chuàng)建和保存

// 方法1:create + save
const newRecord = repository.create({
  title: '新標(biāo)題',
  description: '描述內(nèi)容',
  userId: 1
});
await repository.save(newRecord);

// 方法2:直接 save
await repository.save({
  title: '新標(biāo)題',
  description: '描述內(nèi)容',
  userId: 1
});

// 批量保存
await repository.save([
  { title: '標(biāo)題1', userId: 1 },
  { title: '標(biāo)題2', userId: 1 }
]);

6.update()- 更新記錄

// 按條件更新
await repository.update(
  { status: 'pending' },      // 條件
  { status: 'completed' }     // 更新內(nèi)容
);

// 按ID更新
await repository.update(1, { 
  title: '新標(biāo)題',
  completed: true 
});

// 批量更新
await repository.update(
  { userId: 1 },
  { priority: 2 }
);

7.delete()- 刪除記錄

// 按ID刪除
await repository.delete(1);

// 按條件刪除
await repository.delete({ 
  status: 'completed' 
});

// 批量刪除
await repository.delete([1, 2, 3]);

8. 查詢構(gòu)建器 (Query Builder)

// 復(fù)雜查詢
const records = await repository
  .createQueryBuilder('report')
  .leftJoinAndSelect('report.images', 'image')
  .leftJoinAndSelect('report.user', 'user')
  .where('report.status = :status', { status: 'pending' })
  .andWhere('report.userId = :userId', { userId: 1 })
  .orderBy('report.createdAt', 'DESC')
  .skip(0)
  .take(10)
  .getMany();

// 原生SQL查詢
const records = await repository
  .createQueryBuilder('report')
  .where('DATE(created_at) = :date', { date: '2024-01-01' })
  .getMany();

9. 在你的業(yè)務(wù)中的實(shí)際應(yīng)用

// 上報(bào)記錄的業(yè)務(wù)查詢示例
export class ProblemReportService {
  // 獲取用戶的上報(bào)記錄
  async getUserReports(userId: number, page: number = 1, limit: number = 10) {
    const [reports, total] = await this.problemReportRepository.findAndCount({
      where: { userId },
      relations: ['images', 'project'],
      order: { createdAt: 'DESC' },
      skip: (page - 1) * limit,
      take: limit
    });
    
    return {
      reports,
      total,
      page,
      totalPages: Math.ceil(total / limit)
    };
  }

  // 獲取項(xiàng)目統(tǒng)計(jì)
  async getProjectStats(projectId: number) {
    const total = await this.problemReportRepository.count({
      where: { projectId }
    });
    
    const byStatus = await this.problemReportRepository
      .createQueryBuilder('report')
      .select('report.status, COUNT(*) as count')
      .where('report.projectId = :projectId', { projectId })
      .groupBy('report.status')
      .getRawMany();
    
    return { total, byStatus };
  }

  // 更新上報(bào)狀態(tài)
  async updateReportStatus(id: number, status: number) {
    await this.problemReportRepository.update(id, { status });
    return this.problemReportRepository.findOne(id);
  }
}

10. 常用查詢條件運(yùn)算符

// 比較運(yùn)算符
const records = await repository.find({
  where: {
    priority: MoreThan(2),           // 大于
    createdAt: LessThan(new Date()), // 小于
    userId: In([1, 2, 3]),           // 在數(shù)組中
    title: Like('%關(guān)鍵詞%')           // 模糊查詢
  }
});

// 范圍查詢
const records = await repository.find({
  where: {
    createdAt: Between(
      new Date('2024-01-01'),
      new Date('2024-01-31')
    )
  }
});

總結(jié)

到此這篇關(guān)于NEST.JS框架中TypeORM的安裝和使用教程的文章就介紹到這了,更多相關(guān)TypeORM使用指南內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

阿巴嘎旗| 凤庆县| 徐水县| 周宁县| 仁化县| 溧水县| 万盛区| 淄博市| 阜新市| 深圳市| 洛扎县| 新巴尔虎右旗| 扎兰屯市| 台安县| 合肥市| 青海省| 林州市| 怀化市| 绥宁县| 天门市| 满城县| 和平区| 伽师县| 大名县| 体育| 镇宁| 开江县| 武冈市| 杭州市| 沽源县| 龙陵县| 丹棱县| 龙泉市| 通河县| 精河县| 台山市| 永和县| 玉龙| 白朗县| 永嘉县| 通江县|