天天看點

《Spring 5 官方文檔》14.DAO support

14. dao支援

14.1 介紹

在spring中資料通路對象(dao)旨在使jdbc,hibernate,jpa或jdo等資料通路技術有一緻的處理方法,并且方法盡可能簡單。

這樣就可以很容易地切換上述持久化技術,并且切換過程無需擔心每種技術的特有異常。

14.2 一緻的異常層級

spring為技術特定異常提供了一個适當的轉化,例如:sqlexception 所屬異常類層級用dataaccessexception 作為根異常,這些異常包括了原來的異常,是以不會有丢失可能出錯資訊的風險。

除了jdbc異常,spring也包含了hibernate特定異常,将它們轉換為一組集中的運作時異常(對jdo 和 jpa 異常也是如此),在合适的層次上處理多數不可恢複的持久化異常,而不會在dao上産生繁瑣的catch-throw塊和異常聲明(仍然可以在認為合适的地方捕獲和處理異常)。向上面提到的一樣,jdbc異常(包括資料方言)也都轉化為相同的層級結構,意味着在一個統一的項目模型中你也可以執行一些jdbc操作。

以上列舉的spring的各種模闆類支援各種orm架構。如果使用基于攔截器的類,那麼我們的程式必須關心并處理hibernateexceptions和jdoexceptions本身,最好是通過分别授權給sessionfactoryutils’ `converthibernateaccessexception(..)或 convertjdoaccessexception()方法。這些方法将這些異常轉化為與org.springframework.dao中異常層級相容的異常。由于jdoexceptions 沒有被檢查,它可以被簡單的抛出,這也犧牲了dao在異常上的抽象。

下圖展示了spring提供的異常層級,(請注意:在這張圖上顯示出來的類層級僅僅是整個dataaccessexception 的一個子集)

《Spring 5 官方文檔》14.DAO support

14.3 配置 dao 或 repository 類的注解

使用@repository注解是資料通路對象(daos)或庫能提供異常轉換的最好方式,這個注解還允許元件掃描,查找并配置你的 daos 和庫,并且不需要為它們提供 xml 配置檔案。

任何dao或庫實作都需要通路持久的源,依賴于持久化技術的使用;例如:一個基于jdbc的庫需要通路一個jdbc datasource,一個基于jpa的庫需要通路一個 entitymanager,最簡單的方式就是使用 @autowired, @inject, @resource 或@persistencecontext 這些注解中的一個完成資源的依賴注入,這是一個jpa庫的例子:

如果你使用傳統的hibernate api,你可以注入sessionfactory:

最後一個例子我們将在這裡展示典型的jdbc支援,你将會在初始化方法中注入 datasource ,

在初始化方法中,你将使用這個datasource建立一個jdbctemplate 和其他與simplejdbccall相似的資料通路支援類。