在TypeORM中使用QueryBuilder与使用Repository有哪些不同的用例?

What are the different use cases for using QueryBuilder vs. Repository in TypeORM?(在TypeORM中使用QueryBuilder与使用Repository有哪些不同的用例?)
本文介绍了在TypeORM中使用QueryBuilder与使用Repository有哪些不同的用例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用NestJS和TypeORM构建API。我一直使用TypeORMRepository API查询MySQL数据库,主要是因为NestJS Database documentation section提供了一个使用this.photoRepository.find()的示例。随着时间的推移,我注意到我的许多探索性搜索结果出于性能和灵活性的原因推荐使用TypeORMQueryBuilder API。

我感觉到,如果我决定切换数据库框架,存储库方法更容易用于简单的需求和伟大的抽象。另一方面,在我看来,QueryBuilder的性能和可定制化程度也更高。

我们能概述一下TypeORM中QueryBuilder与存储库的不同用例吗?

SQL

QueryBuilder API非常强大,而且比Repository API更接近推荐答案,因此任何更复杂或更受SQL驱动的事情都可以通过它更轻松地完成。它是您在使用QueryRunner使用原始SQL之前的最后一个"工具",您可能不想每次都使用它(因为它使开发和重构时间更长)。

即使存储库更容易做,您也可能不希望代码库允许使用这2个API,因为它"拆分"了代码,但这完全取决于您的团队首选项。

存储库API更友好的地方在于获取关系,因为急切/延迟关系是从修饰符解析出来的,您不必指定"联接",而QueryBuilder暗示您显式地执行这些操作,否则它将只获取主表(它会忽略修饰符,SQL是第一公民)。

无论如何,即使您决定放弃Repository API或QueryBuilder API,我也强烈建议您始终可以在专用类(如自定义存储库或专用服务)中轻松找到您的查询,这样您就不会最终在代码库中到处维护查询,如果不加以控制,重构数据访问是危险的。例如,我个人发现Repository API上的"find"方法太强大了,并且不允许在专用服务/类/任何您决定的外部使用此类API。

这篇关于在TypeORM中使用QueryBuilder与使用Repository有哪些不同的用例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)