【发布时间】:2019-12-24 18:29:52
【问题描述】:
正如documentation 中提到的,JpaRepository 让我们可以编写原生 SQL 查询。所以,我写了同一个查询的 2 个不同版本。
版本 1:
@Query(value = "SELECT b FROM branch AS b where b.companyId = ?1")
List<Branch> findByCompanyId(Long companyId);
版本 2:
@Query(nativeQuery = true, value = "SELECT * FROM branch where b.company_id = ?1")
List<Branch> findByCompanyId(Long companyId);
两个版本都输出相同的结果,我想知道这些方法之间是否存在性能差异?推荐哪种方法?最佳做法是什么?
【问题讨论】:
-
好吧,在这种情况下,
@Query甚至没有必要,Spring Data 将从该方法推断出相同的 SQL 查询(我会默认使用该方法)。如果查询等效,则在大多数情况下性能应该相似。我认为在提供您自己的查询时没有明确的最佳实践;当您需要一些特定于供应商的数据库实用程序时,可以使用本机查询,我主要使用非本机版本,因为这样您就不必记住或检查实体中数据库列和属性之间的映射 -
同意stackoverflow.com/users/8129075/srthompson 并且永远不要在查询中使用 *。如果添加了字段,则此查询会破坏您的应用程序。最好写一个表的所有字段
-
感谢您的回复。
标签: spring spring-boot jpa spring-data-jpa spring-data