Spring中的findById和类似方法如何工作?

时间:2019-01-28 14:31:33

标签: mysql spring spring-boot spring-data-jpa

这些天,我试图学习JPA和Spring的内部处理。

我对诸如=SUMPRODUCT(COUNTIFS('Sheet1'!A$2:A$191,{"0*","1*","2*","3*","4*","5*","6*","7*","8*","9*"},'Sheet1'!E$2:E$191,IF({1;0},">"&F8,"<" & -1 * F8))) findById()等存储库功能感到困惑。

  1. 这些功能如何工作,它们在每次调用时都访问数据库吗? 可以说,如果执行以下操作

    findNameById()

数据库会命中1百万次吗?

  1. 如果for(loop 1million ids) {SomeRepo.findById(Long Id);}用于简单的数据库调用,可以说要基于名称获取ID,那么它在数据库调用和处理方面将如何工作?

1 个答案:

答案 0 :(得分:0)

如果您在for周期中进行数据库调用,它将达到db一百万次,除非您使用缓存,否则框架将无法避免这种情况。 而是使用for(loop 1million ids){ SomeRepo.findById(Long Id);}

您应该使用findByIdIn(List<long> ids)并进行一次数据库调用(必要时使用id分页)

@Query做同样的事情,您可以使用自己喜欢的方法,但是可能发生方法名称太长的例子:

List<Person> findByPersonAddressNameAndPersonAddressNumberOrderByPersonAddressNameDesc(String addressName, Long addressNumber)

,在这种情况下,您可以为带有查询注释的方法选择一个简短的名称

  @Query(from Person where person.address.name = :name and person.address.number = :number order by person.address.number desc);
  public List<Person> findByAddressAndNumber(String name, Long number)