我是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/SpringBootFirstspring-boot-starter-data-jpa
包含Hibernate。启动器,顾名思义,是使您更容易启动的启动器。这个启动器包含
- Spring Data JPA Hibernate
- Spring JDBC, Spring Transactions, Spring AOP和Spring Aspects(如果需要)。
这样你就可以自动获得你需要的那些依赖,而不是你试图拼凑工作版本和兼容版本。
所以是的,你确实使用了JPA的实现,默认情况下启动器是Hibernate。