这些天,我试图学习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()
等存储库功能感到困惑。
这些功能如何工作,它们在每次调用时都访问数据库吗? 可以说,如果执行以下操作
findNameById()
数据库会命中1百万次吗?
for(loop 1million ids) {SomeRepo.findById(Long Id);}
用于简单的数据库调用,可以说要基于名称获取ID,那么它在数据库调用和处理方面将如何工作?答案 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)