You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM中何时优先用entity.find()而非createQueryBuilder()?二者是否等价?

查询逻辑是否等价

你给出的示例中,两种写法生成的SQL完全一致,查询逻辑是等价的。
但如果你的User实体配置了全局查询规则(比如软删除、多租户全局过滤、默认查询字段限制),findOne会自动应用这些规则,而createQueryBuilder默认不会继承,需要手动调用对应方法才能匹配,此时二者逻辑就不等价了。

性能差异

二者性能没有本质区别。find系列方法底层本身就是对createQueryBuilder的封装,只要最终生成的SQL相同,数据库执行效率完全一致,TypeORM层面的封装开销可以忽略不计。

优先使用find系列方法的场景

  • 简单单表查询场景:单表的条件过滤、排序、分页等基础需求,find写法更简洁,不需要手动写别名、参数绑定,代码可读性更高,维护成本更低。比如分页查询启用用户的写法:
    const users = await User.find({
      where: { status: 1 },
      skip: 0,
      take: 10,
      order: { createdAt: 'DESC' }
    })
    
    对比用createQueryBuilder实现相同逻辑要写更多模板代码,冗余度高。
  • 需要继承全局查询规则的场景:如果实体开了软删除、全局租户过滤等配置,find系列会自动带上对应过滤条件,不需要手动编写,避免遗漏导致逻辑错误。
  • 对类型安全要求高的场景:find的入参和实体属性强绑定,TypeScript编译阶段就会校验属性名是否正确,比createQueryBuilder里写字符串形式的查询条件(比如user.username = :value)的拼写错误概率低很多。
  • 快速开发场景:find系列不需要写冗余的模板代码,开发效率更高。

内容的提问来源于stack exchange,提问作者Kid_Learning_C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:05