[英]Questions for JPA repository example in Spring in Action 4th edition
在第325页周围:
SpitterRepository extends JpaRepository.
SpitterRepositoryImpl implements SpitterRepository. Also SpitterRepositoryImpl extends SpitterSweeper interface.
public interface SpitterSweeper{
int eliteSweep();
}
它说eliteSweep
方法应该在SpitterRepository
接口中声明。 因此,我不太了解它,为什么我们不能仅在eliteSweep
接口中声明它?
从他们的文档 :
存储库代理有两种从方法名称派生特定于商店的查询的方式。 它可以直接从方法名称或通过使用其他创建的查询派生查询。 可用选项取决于实际商店。 但是,必须有一种策略来确定要创建的实际查询。 让我们看一下可用的选项。
内置在Spring Data存储库基础结构中的查询构建器机制对于在存储库实体上构建约束查询很有用。 该机制从方法中剥离前缀find ... By,read ... By和get ... By,然后开始解析其余部分。 Introduction子句可以包含其他表达式,例如Distinct,以在要创建的查询上设置不同的标志。 但是,第一个By用作分隔符,以指示实际标准的开始。 在最基本的级别上,您可以定义实体属性的条件,并将其与And和Or串联。
这意味着,Spring Data JPA将根据方法名称构造查询,对于简单查询,您无需编写jpql/hql
查询,Spring data jpa会自动创建它们。 Spring数据jpa将解析方法名称并构建所需的查询。
至于why are declared in interface?
该框架将尝试创建一个存储库代理实例,此接口的具体实现将在您注入该接口的地方使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.