我正在编写 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/