我正在使用NestJS和TypeORM构建一个API。我一直在使用TypeORM 存储库API查询一个NestJS数据库文档部分数据库,主要是因为NestJS数据库文档部分提供了一个使用this.photoRepository.find()的示例。当我更进一步的时候,我注意到我的许多探索性搜索结果推荐使用TypeORM QueryBuilder API来提高性能和灵活性。
我感觉到,如果我决定切换我的数据库框架,Repository方法更容易用于简单的需求和一个很好的抽象。另一方面,在我看来,QueryBuilder更具有表现性和可定制性。
我们能概述一下QueryBuilder与TypeORM中存储库的不同用例吗?
发布于 2019-11-06 08:35:26
与Repository相比,QueryBuilder API非常强大,更接近于SQL,因此任何更复杂或更受SQL驱动的东西都更容易通过它完成。这是您在使用QueryRunner使用原始SQL之前的最后一个“工具”,您可能不希望每次都使用它(因为它会使开发和重构更长)。
即使存储库更容易完成,也许您也不希望您的代码库允许在代码“拆分”代码时使用2API,但这完全取决于您的团队首选项。
存储库API更友好的地方在于获取关系,因为急切/懒惰的关系是从装饰器中解析出来的,您不必指定“联接”,而QueryBuilder暗示您显式地显示这些关系,否则它只获取主表(它忽略装饰器,SQL是第一公民)。
无论如何,即使您决定放弃Repository或repository,我仍然强烈建议您的查询总是很容易在专用类中找到(比如自定义存储库或专用服务),这样就不会在代码库中到处维护查询,重构数据访问如果不受控制的话是危险的。例如,我个人认为Repository上的" find“方法过于强大,并且不允许在专用服务/类/您决定的任何情况下使用这种API。
https://stackoverflow.com/questions/58722202
复制相似问题