在Sping Boot 和JPA中,有一个接口JpaRepository,它已经提供了最重要的方法,如findAll、saveAll。如果没有,怎么能定义这样的接口呢?我曾经研究过JpaRepository,那里的方法没有编码出来。但是也只有指定了List<T> findAll();,实际的代码在哪里?多谢了
findAll
saveAll
List<T> findAll();
xlpyo6sf1#
这些方法没有被编码出来。但是也只能用List findAll();实际代码在哪里?JpaRepository只是一个接口,这意味着它只提供该接口可用内容的声明和签名。JpaRepository是spring利用JPA layer的一种方式,并提供了一些对程序员非常有用的附加常用功能。尽管如此,理解JPA layer遵循JPA specification是很重要的,这只是一个规范而不是实现。多个提供者提供了他们的实现,只要他们符合这个规范。这些提供者(例如hibernate、eclipseLink、DataNucleus)提供JPA layer的功能。这些提供程序提供与数据库通信的代码,并执行jpa layer的实际工作。JpaRepository的功能是:它利用了JPA layer,并通过调用jpa layer上必需的功能提供了一些额外的功能,并公开了一些常见的功能。因此,JpaRepository不会使用本机查询直接与数据库通信,而是使用hibernte示例中提供的jpa layer,并提供一些jpa query冬眠以获取它想要的东西。在Spring中,您可以找到一些JpaRepository的实现类,如SimpleJpaRepository.class,但它们同样不提供端到端功能,而是通过jpa layer间接与提供程序(如hib)通信,以便为程序员提供一些常用功能。
JpaRepository
JPA layer
JPA specification
hibernate
eclipseLink
DataNucleus
jpa layer
hibernte
jpa query
SimpleJpaRepository.class
1条答案
按热度按时间xlpyo6sf1#
这些方法没有被编码出来。但是也只能用List findAll();实际代码在哪里?
JpaRepository
只是一个接口,这意味着它只提供该接口可用内容的声明和签名。JpaRepository
是spring利用JPA layer
的一种方式,并提供了一些对程序员非常有用的附加常用功能。尽管如此,理解
JPA layer
遵循JPA specification
是很重要的,这只是一个规范而不是实现。多个提供者提供了他们的实现,只要他们符合这个规范。这些提供者(例如hibernate
、eclipseLink
、DataNucleus
)提供JPA layer
的功能。这些提供程序提供与数据库通信的代码,并执行jpa layer
的实际工作。JpaRepository
的功能是:它利用了JPA layer
,并通过调用jpa layer
上必需的功能提供了一些额外的功能,并公开了一些常见的功能。因此,JpaRepository
不会使用本机查询直接与数据库通信,而是使用hibernte
示例中提供的jpa layer
,并提供一些jpa query
冬眠以获取它想要的东西。在Spring中,您可以找到一些
JpaRepository
的实现类,如SimpleJpaRepository.class
,但它们同样不提供端到端功能,而是通过jpa layer
间接与提供程序(如hib)通信,以便为程序员提供一些常用功能。