Kyl*_*ker 8 mysql database typeorm nestjs
我正在使用带有 TypeORM 的 NestJS 构建 API。我一直在使用 TypeORM Repository API查询 MySQL 数据库,主要是因为NestJS 数据库文档部分提供了一个使用this.photoRepository.find()
. 随着我的深入,我注意到我的许多探索性搜索结果都出于性能和灵活性的原因推荐使用 TypeORM QueryBuilder API。
我感觉如果我决定切换我的数据库框架,Repository 方法更容易用于简单的需求和一个很好的抽象。另一方面,在我看来 QueryBuilder 的性能和可定制性也更高。
我们能否概述 TypeORM 中 QueryBuilder 与 Repository 的不同用例?
zen*_*eni 11
QueryBuilder API 非常强大,并且比 Repository API 更接近 SQL,因此任何更复杂或更受 SQL 驱动的事情都可以通过它更轻松地完成。这是使用 QueryRunner 进行原始 SQL 之前的最后一个“工具”,您可能不想每次都使用它(因为它会延长开发和重构时间)。
即使存储库更容易做到,也许您不希望您的代码库允许使用 2 API,因为它“拆分”了代码,但这一切都取决于您的团队偏好。
存储库 API 更友好的一点是获取关系,因为急切/惰性关系是从装饰器中解析的,并且您不必指定“连接”,而 QueryBuilder 则意味着您明确这些关系,否则它将仅获取主表(它忽略装饰器,SQL 是第一公民)。
无论如何,即使您决定放弃 Repository API 或 QueryBuilder API,我强烈建议您始终可以在专用类(如自定义存储库或专用服务)中轻松找到您的查询,这样您就不必在任何地方维护查询在代码库中,如果不加以控制,重构数据访问将是危险的。例如,我个人认为“查找”方法在存储库 API 上过于强大,并且不允许在专用服务/类/您决定的任何内容之外使用此类 API。
归档时间: |
|
查看次数: |
1759 次 |
最近记录: |