一、SpringDataJpa的含義: SpringDataJpa: 是Spring基於ORM框架、JPA規範封裝的一套JPA應用框架,是SpringData中的一個子模塊,可讓開發者用極簡的代碼即可實現對數據的訪問和操作。它提供了包括增刪改查、排序、分頁等在內的常用功能,主要針對的就是 Sprin ...
一、SpringDataJpa的含義:
SpringDataJpa: 是Spring基於ORM框架、JPA規範封裝的一套JPA應用框架,是SpringData中的一個子模塊,可讓開發者用極簡的代碼即可實現對數據的訪問和操作。它提供了包括增刪改查、排序、分頁等在內的常用功能,主要針對的就是 Spring 的業務邏輯代碼。
它是JPA規範的再次封裝抽象,底層還是使用了Hibernate的JPA技術實現,引用JPQL的查詢語句 ,是屬於Spring的生成體系中的一部分。
二、SpringDataJpa的繼承結構:
SpringDataJpa的優點:它的Dao層只需要寫介面,不需要寫實現類,只需要寫一個介面繼承JpaRepository介面即可,該介面有兩個泛型<T,ID>,在Dao層介面里可以什麼都不用寫。
T:domain實體類類型
ID:domain實體類的主鍵欄位類型
SpringDataJpa繼承結構圖分析:
1、JpaRespository、PagingAndSortingRepository、CrudRepository三個介面都添加了@NoRepositoryBean註解【只要添加這個註解,Spring在掃描到有這個註解 的介面的時候就不用生成實現類,就不用創建bean對象】。
2、我們自定義的IEmployeeRepository介面沒有添加這個註解,那麼Spring在掃描到這個介面的時候,就會給這個介面創建對象,但是這個介面卻沒有實現類,那SpringDataJpa就會利用動態代理技術給這個介面自動生成一個實現類,然後進行動態編譯、類載入、反射來創建對象,最後保存到Spring容器中,這樣就不用自己手動寫Dao層實現類也可以獲得Dao層介面的對象,然後使用@Autowired進行自動註入了。
3、其實SpringDataJPA內部已經寫了一個實現類實現了JPARepository介面,已經實現了JpaRespository、PagingAndSortingRepository、CrudRepository這三個介面中的所有抽象方法,SpringDataJPA自動幫我們生成的實現類會自動:
實現IEmployeeRepository介面,
繼承SimpleJapRepository類,
最終我們得到(註入)的那個對象其實本質是SimpleJapRepository類的子類對象!!!
4、 因為SpringDataJPA自動幫我們生成的類繼承了SimpleJPARepository類,並且實現了IEmployeeRepository介面,所以創建對象之後就可以調用直接JpaRespository、PagingAndSortingRepository、CrudRepository這三個介面中的所有方法了,因為SimpleJPARepository類已經幫我們將所有抽象方法都實現了。