Spring Data JPA如何提供数据访问接口而不是休眠数据访问层


问题内容

当探究hibernate
JPA实现时,我想到了使用hibernate和创建数据访问层以将数据读取和插入数据库以及从数据库插入数据的想法。现在我在项目中使用spring +
spring数据JPA +
Hibernate进行某些CRUD操作。我想到了数据JPA的作用是为数据库访问提供CRUD存储库而不是hibernateDAO。我这样使用CRUD存储库,

package com.central.repository;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import com.central.model.*;
public interface DriverRepository extends CrudRepository<Driver, Integer> {

Driver findById(Integer id);
}

在这里,我从数据JPA的“
CrudRepository”存储库扩展而来。当我使用它时,数据JPA如何为我的界面提供存储库?它们是如何内置的,为我提供findAll(),save()和delete()存储库方法?实际上,我对JPA数据如何为我的界面提供存储库的作用感到怀疑?以及Data
JPA如何与hibernate通信以提供这些存储库实现?有人可以指导解决Data JPA与Hibernate JPA实现通信的核心概念吗?


问题答案:

Spring Data为接口创建代理,并且为每种方法尝试不同的策略以查找/创建方法的实现。

的方法CrudRepository是在的SimpleJpaRepository其他方法对象中基于注释,参数和返回类型以及方法名称创建的,然后由代理调用。

一篇有关基本概念的Wiki文章可能会有所帮助。