Spring Data JPA与findBy / findAllBy的区别
在以下之间使用Spring Data JPA关键字时是否有任何区别:
List findBySomeCondition();
和
List findAllBySomeCondition();
不,它们之间没有区别,它们将执行完全相同的查询,当从方法名称派生查询时,Spring Data会忽略All
部分。 唯一重要的一点是By
关键字,其后面的任何内容都被视为一个字段名称(除了OrderBy
之外的其他关键字,它们可能会导致一些奇怪的方法名称,如findAllByOrderByIdAsc
)。
这意味着这样的东西是完全有效的:
List findAnythingYouWantToPutHereBySomeCondition();
并将执行完全相同的SQL查询:
List findBySomeCondition();
要么
List findAllBySomeCondition();
更新:我从未在文档中看到任何关于此行为的官方描述,但在最近关于即将发布的Spring Data(Kay)2.0版本的博客文章中 ,它解释了:
Spring Data的方法解析使用前缀关键字,如
find
,exists
,count
和delete
以及终止By
关键字。 您在find
和By
之间放置的所有内容都会使您的方法名称更具表现力,并且不会影响查询派生。
如果我们想要通过名称或其他标准找到findByFirstName(String firstName);
则使用findBy方法findByFirstName(String firstName);
findAll方法通常通过提供规范来找到
List findAll(Specification spec);
请参阅下面的文档以获得更清晰:
http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html