java - 使用@Query 与通过 CrudRepository 的 findAll() 进行自定义查询哪个更快?

标签 java sql database hibernate jpa

我正在编写 Java 代码以从数据库表中获取所有行。

我正在使用 CrudRepository 并在下面使用了这个方法。

public interface StudentRepository extends CrudRepository<Student, Long> 
{
    public List<Student> findById(long id);
}

@Query(value = "SELECT s FROM Student s")
List<Student> customMethod(long id);

哪种方法更快? Java 内部方法是否提供比我们自定义查询更快的速度?

提前致谢。

最佳答案

Spring Data Repository 提供的默认 findById 和查询注释方法具有明显不同的语义。但是,为了简短起见,我将尽量专注于性能差异。

除非您启用了查询缓存,否则查询注解方法将始终通过查询访问数据库

另一方面,

findById 最终会调用 EntityManager.find()EntityManager.find() 首先在持久性上下文中查找实体。这意味着如果实体已经加载到上下文中,则调用不会命中底层数据库

作为旁注,如果您对 Spring 如何实现默认存储库方法感到好奇,请查看 SimpleJpaRepository 的源代码。

关于java - 使用@Query 与通过 CrudRepository 的 findAll() 进行自定义查询哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892763/

相关文章:

java - 由于 firebase sdk 依赖性,构建失败

java - 通过引用方法传递参数的正确且最佳的方法是什么?

java - Maven 在目标文件夹中解压 war

MySQL 条件 Where 子句

sql - Presto 语法中的 FROM UNIX TIME

java - 在 Excel 上书写

mysql - 插入后sql触发错误

mysql - 使用 MySQL EXPLAIN 优化查询

mysql - 触发因素:足球队训练问题

database - 用于数据库抽象的惯用 haskell