介紹
Spring Data的使命是爲數據訪問提供熟悉且一致的基於Spring的編程模型,同時仍保留底層數據存儲的特殊特性。
它使數據訪問技術,關係數據庫和非關係數據庫,map-reduce框架和基於雲的數據服務變得簡單易用。這是一個傘形項目,其中包含許多特定於給定數據庫的子項目。這些項目是通過與這些激動人心的技術背後的許多公司和開發人員合作開發的。
特徵
- 強大的存儲庫和自定義對象映射抽象
- 從存儲庫方法名稱派生動態查詢
- 實現域基類提供基本屬性
- 支持透明審覈(創建,最後更改)
- 可以集成自定義存儲庫代碼
- 通過JavaConfig和自定義XML命名空間輕鬆實現Spring集成
- 與Spring MVC控制器的高級集成
- 跨存儲持久性的實驗支持
主要模塊
Spring Data主要使用的一些模塊,根據需要選擇對應的一些功能模塊。
Spring Data common- 支持每個Spring Data模塊的Core Spring概念。
Spring Data JDBC- 對JDBC的Spring Data存儲庫支持。
Spring Data JPA - 對JPA的Spring Data存儲庫支持。
Spring Data MongoDB - 對MongoDB的基於Spring對象文檔的存儲庫支持。
Spring Data Redis - 從Spring應用程序輕鬆配置和訪問Redis。
Spring Data JDBC Ext- 支持標準JDBC的數據庫特定擴展,包括對Oracle RAC快速連接故障轉移的支持,AQ JMS支持以及對使用高級數據類型的支持。
Spring Data KeyValue - Map基於庫和SPI輕鬆建立鍵值存儲一個Spring數據模塊。
Spring Data LDAP - 對Spring LDAP的 Spring Data存儲庫支持。
Spring Data REST- 將Spring Data存儲庫導出爲超媒體驅動的RESTful資源。
Spring Data for Pivotal GemFire - 輕鬆配置和訪問Pivotal GemFire,實現高度一致,低延遲/高吞吐量,面向數據的Spring應用程序。
Spring Data for Apache Cassandra- 輕鬆配置和訪問Apache Cassandra或大規模,高可用性,面向數據的Spring應用程序。
Spring Data for Apace Geode- 輕鬆配置和訪問Apache Geode,實現高度一致,低延遲,面向數據的Spring應用程序。
Spring Data for Apache Solr- 爲面向搜索的Spring應用程序輕鬆配置和訪問Apache Solr。
JPA Spring Data 概述
JPA Spring Data: 致力於減少數據訪問層(DAO)的開發量。開發者唯一要做的,就只是聲明持久層的接口,其他都交給Spring Data JPA 來幫你完成!
框架怎麼可能代替開發者實現業務邏輯呢?比如:當有一個UserDao.findUserById()這樣一個方法聲明,大致應該能判斷出這是根據給定條件的ID查詢出滿足條件的User對象。Spring Data JPA 做的便是規範方法的名字,根據符合規範的名字來確定方法需要實現什麼樣的邏輯。
Spring Data JPA HelloWorld
使用Spring Data JPA進行持久層開發需要的四個步驟:
- 配置Spring 整合 JPA
- 在Spring 配置文件中配置Spring Data ,讓Spring 爲聲明的接口創建代理對象。配置了<jpa:repositories>後,Spring 初始化容器將會掃描base-package 指定的包目錄及其子目錄,爲繼承Repository 或其子接口的接口創建代理對象,並將代理對象註冊爲Spring Bean ,業務層便可以通過Spring自動封裝的特性來直接使用該對象。
- 聲明持久層的接口,該接口繼承 Repository ,Repository是一個標記型接口,它不包含任何方法,如必要,Spring Data 可實現Repository其他子接口,其中定義了一些常用的增刪改查,以及分頁相關的方法。
- 在接口中聲明需要的方法。Spring Data 將根據給定的策略(具體策略稍後講解)來爲其生成實現代碼。
Repository 接口
1、Repository是一個空接口,即是一個標記接口
2、若我們定義的接口繼承了Repository,則該接口會被IOC容器識別爲一個Repository Bean 納入到IOC容器中,進而可以在該接口中定義滿足一定規範的方法
3、實際上,也可以通@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class) 註解來代替 extends Repository<Person, Integer>
Repository 子接口
在eclipse 中選中Repository ,Ctrl + T ,有多個子接口和實現類
繼承關係如下:
①、Repository :僅僅是一個標識,表名任何繼承它的均爲倉庫接口類
②、CurdRepository : 繼承Repository ,實現了一組CURD相關的方法
③、PagingAndSortingRepository :繼承CurdRepository ,實現了一組分頁排序相關的方法
④、JpaRepository : 繼承PagingAndSortingRepository ,實現一組Jpa 規範相關的方法
⑤、自定義 的 XXXRepository :需要繼承JpaRepository ,這樣的XxxRepository 接口就具備了通用的數據訪問控制層的能力。
⑥、JpaSpecificationExecutor :不屬於Repository 體系,實現一組JpaCriteria 查詢相關的方法
Spring Data Repository 查詢方法定義規範
簡單查詢條件 :查詢某一個實體類或是集合
在Repository 子接口中聲明方法:
①、不是隨便聲明的,而需要符合一定的規範
②、查詢方法以 find | read | get 開頭
③、涉及條件查詢時,條件的屬性用條件關鍵字連接
④、要注意的是:條件屬性以首字母大寫
⑤、支持屬性的級聯查詢。若當前類有符合條件的屬性,則優先使用,而不使用級聯屬性。若需要使用級聯屬性,則屬性之間使用_連接