Spring Data JPA vs Hibernate: JPA repository中方法的实现在哪里?



我是JPA和Hibernate的新手。我知道Hibernate是JPA的实现,但是Spring Data JPA是JPA的数据访问抽象(而不是JPA的实现)。

,

StudentRepository.java

@Repository
public interface StudentRepository extends JpaRepository<Student,Integer>{
}

Routing in Controller class

@GetMapping("/all")
public List<Student> listAllStudents(){
List listOfStudents = studentRepo.findAll();
return listOfStudents;
}

上面的代码运行良好。(不添加完整代码和其他类以减少冗长。)我没有添加Hibernate或任何其他JPA实现,我只是使用了Spring数据JPA。但代码工作良好(如在许多教程在网上显示)。

这是Spring data JPA的依赖关系,我正在使用。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.6.7</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>

让我困惑的是,如果我没有使用任何JPA实现,这段代码是如何工作的?实现的代码在哪里?

在日志中,我可以看到与Hibernate相关的东西,尽管我没有添加Hibernate依赖或直接使用Hibernate中的任何东西。

2022-07-05 10:55:59.470  INFO 13332 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.9.Final
2022-07-05 10:55:59.729  INFO 13332 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-07-05 10:55:59.899  INFO 13332 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MariaDB106Dialect

是否间接使用Hibernate ?

PS:对不起,如果这个问题很幼稚,我正试图理解这是如何工作的。

编辑:完整代码:https://github.com/TMGautham/SpringBootFirst

spring-boot-starter-data-jpa包含Hibernate。启动器,顾名思义,是使您更容易启动的启动器。这个启动器包含

  • Spring Data JPA
  • Hibernate
  • Spring JDBC, Spring Transactions, Spring AOP和Spring Aspects(如果需要)。

这样你就可以自动获得你需要的那些依赖,而不是你试图拼凑工作版本和兼容版本。

所以是的,你确实使用了JPA的实现,默认情况下启动器是Hibernate。

相关内容

  • 没有找到相关文章

最新更新