Spring Data JPA (JDBC)中findBy 和 findAllBy之间的差异

不,它们之间没有区别,它们将执行完全相同的查询,从方法名称派生查询时,Spring Data会忽略该部分。唯一重要的一点是关键字,它后面的任何内容都被视为字段名称(除了其他关键字,例如偶然可能导致一些奇怪的方法名称,例如)。AllByOrderByfindAllByOrderByIdAsc

这意味着这样的事情是完全有效的:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();
Copy

并将执行与以下查询完全相同的 SQL 查询:

List<SomeEntity> findBySomeCondition();
Copy

List<SomeEntity> findAllBySomeCondition();
Copy

2.3.6版Spring数据的文档讨论了此功能:

任何文本之间的(或其它引入关键字)都被认为是描述性的,除非使用诸如a的结果限制关键字之一来设置在要创建的查询上的不同标志或/来限制查询结果。findByDistinctTopFirst

该功能的目的在一篇关于当时即将推出的Spring Data 2.0版本的博客文章中进行了解释:

Spring Data的方法解析使用前缀关键字,如、、和终止关键字。介于两者之间的所有内容都会使方法名称更具表现力,并且不会影响查询派生。findexistscountdeleteByfindBy

为了说明这种差异,让我们看一下这两个函数:

1. Set<Policy> findAllByRoleIn(Iterable<Role> role);

2. Set<Policy> findByRoleIn(Iterable<Role> role);
Copy

第一个函数生成的查询:

1.  select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
Copy

第二个函数生成的查询:

2. select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
Copy

结论:显然,如果我们看一下这两个函数生成的查询。我们可以清楚地看到,这两个函数定义之间没有区别,它们执行完全相同的查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值