歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring3 Mybatis 異常處理

Spring3 Mybatis 異常處理

日期:2017/3/1 10:05:06   编辑:Linux編程

通常在 Dao 層將所有異常都轉嫁到 Spring 的 RuntimeException 體系中來 -DataAccessException

Spring的DAO框架沒有拋出與特定技術相關的異常,例如SQLException或HibernateException,拋出的異常都是與特定技術無關的org.springframework.dao.DataAccessException類的子類,避免系統與某種特殊的持久層實現耦合在一起。DataAccessException是RuntimeException,是一個無須檢測的異常,不要求代碼去處理這類異常,遵循了Spring的一般理念:異常檢測會使代碼到處是不相關的catch或throws語句,使代碼雜亂無章;並且NestedRuntimeException的子類,是可以通過NestedRuntimeException的getCause()方法獲得導致該異常的另一個異常。Spring的異常分類有

Spring的DAO異常層次

異常

何時拋出

CleanupFailureDataAccessException 一項操作成功地執行,但在釋放數據庫資源時發生異常(例如,關閉一個Connection) DataAccessResourceFailureException 數據訪問資源徹底失敗,例如不能連接數據庫 DataIntegrityViolationException Insert或Update數據時違反了完整性,例如違反了惟一性限制 DataRetrievalFailureException 某些數據不能被檢測到,例如不能通過關鍵字找到一條記錄 DeadlockLoserDataAccessException 當前的操作因為死鎖而失敗 IncorrectUpdateSemanticsDataAccessException Update時發生某些沒有預料到的情況,例如更改超過預期的記錄數。當這個異常被拋出時,執行著的事務不會被回滾 InvalidDataAccessApiusageException 一個數據訪問的JAVA API沒有正確使用,例如必須在執行前編譯好的查詢編譯失敗了 invalidDataAccessResourceUsageException 錯誤使用數據訪問資源,例如用錯誤的SQL語法訪問關系型數據庫 OptimisticLockingFailureException 樂觀鎖的失敗。這將由ORM工具或用戶的DAO實現拋出 TypemismatchDataAccessException Java類型和數據類型不匹配,例如試圖把String類型插入到數據庫的數值型字段中 UncategorizedDataAccessException 有錯誤發生,但無法歸類到某一更為具體的異常中

Spring的DAO異常層次是如此的細致缜密,服務對象能夠精確地選擇需要捕獲哪些異常,捕獲的異常對用戶更有用的信息,哪些異常可以讓她繼續在調用堆棧中向上傳遞。

於是,我們在dao中只需要拋出這個運行時異常,我們就可以在

/**
* 根據時間獲取日KPI數據
* @param date 日期
* @return
*/
public List<KPIDataBean> getKPIOfDayDataByDate(String date) throws DataAccessException;

並在它的實現類中也拋出這麼個異常。

這樣,在調用這個方法的時候,我們捕獲這個異常即可:

try {
list = kpiDao.getKPIOfDayDataByDate(date);
} catch(DataAccessException e) {
System.out.println("test:" + e.getMessage());
}

這樣就可以捕獲相應的異常了。

這是打印出來的信息

test:nested exception is org.apache.ibatis.exceptions.PersistenceException:

### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

Copyright © Linux教程網 All Rights Reserved