天天看點

《Spring Data實戰》——1.2 主題概述

本節書摘來自異步社群《spring data實戰》一書中的第1章,第1.2節,作者: 【美】mark pollack , oliver gierke , thomas risberg , jon brisbin , michael hunger著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

spring data的核心目标是:支援對所有的存儲進行資源配置,進而實作對該存儲的通路。這種支援主要是通過xml命名空間和spring javaconfig的支援類實作的,這可以使我們輕松地對mongo資料庫、嵌入式neo4j執行個體等建立通路。除此之外,它也內建了spring的核心功能,如jmx。這意味着某些存儲可以通過原生api暴露統計資料,這些資料将會由spring data暴露給jmx。

大部分的nosql java api并未支援将領域對象映射到存儲的資料抽象(mongodb中的檔案,neo4j中的節點與關系)。是以,當使用原生的java驅動程式進行讀取和寫入操作時,通常需要編寫大量的代碼來将資料映射到應用程式的領域對象。是以spring data子產品最核心的部分是一個映射和轉換的api,用來擷取要持久化的領域類中的中繼資料,使得任意領域對象都可以轉換成存儲用的資料類型。

在此基礎上,就如同著名的spring jdbctemplate、jmstemplate等,我們也會看到以模闆模式實作的api,其中包括redistemplate、mongotemplate等。或許你已經知道,這些模闆提供了讓我們可以執行常用操作的輔助方法。例如:在一條語句中持久化一個對象的時候,能夠自動進行資源管理和異常處理。此外,還提供了回調接口的api,允許在資源管理和異常處理過程中使用存儲原生的api,以提高靈活性。

這些功能給我們提供了一個工具箱,使得我們可以像使用傳統的資料庫那樣來實作資料通路層。後面的章節将會詳細介紹這些功能。為了讓程式變得更簡單,spring data還在模闆實作的基礎上提供了一個存儲(repository)抽象,這将減少資料通路對象在實作一個普通接口時去定義通用場景的代價,如标準的crud(建立、讀取、更新、删除)操作以及執行存儲支援的查詢語句。事實上,這種抽象位于最頂層,而且它會盡可能在合理範圍内将不同存儲api融合在一起。是以,存儲的操作将擁有許多共同點。這也是後面會有專門的章節(第2章)來介紹基本程式設計模型的原因。

接着,我們來看一下用來展示這些特定存儲子產品功能所用的示例代碼和領域模型。