全书目录

第二十四篇:TypeORM 完全指南 —— 数据映射施工队宇宙

第七章:Query Builder —— 复杂施工单编制台

1 分钟 313 字 第 439 / 962 个阅读单元

当查询开始复杂时,只靠 find 系列就会越来越别扭。

这时你需要 QueryBuilder

可以把它理解成:

不是日常施工,而是复杂施工单深化编制。

ts
const posts = await dataSource
  .getRepository(Post)
  .createQueryBuilder("post")
  .leftJoinAndSelect("post.author", "author")
  .where("author.isActive = :isActive", { isActive: true })
  .andWhere("post.title ILIKE :keyword", { keyword: "%TypeORM%" })
  .orderBy("post.id", "DESC")
  .take(10)
  .getMany();

这类查询为什么需要 QueryBuilder?

因为它擅长:

  • 显式 join
  • 复杂 where
  • 条件拼装
  • 排序、分页
  • 聚合、分组
  • 精细控制返回结果
  • 在 ORM 映射和 SQL 之间保持可读的中间层
#它的心智不是“更复杂的 Repository”

而是:

text
Repository.find
= 常规施工

QueryBuilder
= 需要画精细施工单的时候
#一个特别实用的判断标准

如果你开始频繁遇到这些情况:

  • 动态条件组合
  • 多表 join
  • 聚合统计
  • 子查询
  • 需要看清生成的 SQL 语义

那就不要硬把所有事情都塞进 find 选项里。

该上 QueryBuilder 就上。