網(wǎng)站首頁 編程語言 正文
https://docs.spring.io/spring-framework/reference/data-access/dao.html
Spring中的數(shù)據(jù)訪問對象(DAO)支持旨在使以一致的方式使用數(shù)據(jù)訪問技術(shù)(如JDBC、Hibernate或JPA)變得簡單。這讓你能夠在上述持久化技術(shù)之間輕松切換,并且還允許你在編碼時不必擔(dān)心捕獲特定于每種技術(shù)的異常。
一致的異常層次結(jié)構(gòu)
Spring提供了從技術(shù)特定的異常(如SQLException
)到其自己的異常類層次結(jié)構(gòu)的便捷轉(zhuǎn)換,該層次結(jié)構(gòu)以DataAccessException
作為根異常。這些異常包裝原始異常,因此永遠不會有丟失可能出錯信息的風(fēng)險。
除了JDBC異常外,Spring還可以包裝JPA和Hibernate特定的異常,將它們轉(zhuǎn)換為一組針對性的運行時異常。這使你能夠在適當(dāng)?shù)膶又刑幚泶蠖鄶?shù)不可恢復(fù)的持久化異常,而無需在DAO中編寫繁瑣的catch-and-throw
塊和異常聲明。(當(dāng)然,仍然可以在需要的地方捕獲和處理異常。)JDBC異常(包括特定于數(shù)據(jù)庫的方言)也轉(zhuǎn)換為相同的層次結(jié)構(gòu),這意味著可以在一致的編程模型中使用JDBC執(zhí)行某些操作。
前面的討論同樣適用于Spring支持的各種ORM框架中的不同模板類。如果使用基于攔截器的類,應(yīng)用程序必須自行處理HibernateExceptions
和PersistenceExceptions
,最好是分別委托給SessionFactoryUtils
的convertHibernateAccessException(..)
或convertJpaAccessException(..)
方法。這些方法將異常轉(zhuǎn)換為與org.springframework.dao
異常層次結(jié)構(gòu)中的異常兼容的異常。由于PersistenceExceptions
是未檢查的異常,它們也可以被拋出(盡管在異常方面犧牲了通用DAO抽象)。
下面的圖片展示了Spring提供的異常層次結(jié)構(gòu)。(請注意,圖片中詳細說明的類層次結(jié)構(gòu)僅顯示了整個DataAccessException
層次結(jié)構(gòu)的一個子集)
用于配置DAO或Repository類的注解
確保你的數(shù)據(jù)訪問對象(DAOs)或存儲庫(repositories)提供異常轉(zhuǎn)換的最佳方式是使用@Repository
注解。這個注解還允許組件掃描支持找到并配置DAO和存儲庫,無需為它們提供XML配置條目。下面的例子展示了如何使用@Repository
注解:
@Repository
public class SomeMovieFinder implements MovieFinder {
// ...
}
任何DAO或存儲庫實現(xiàn)都需要訪問持久化資源,這取決于所使用的持久化技術(shù)。例如,基于JDBC的存儲庫需要訪問JDBC DataSource
,而基于JPA的存儲庫需要訪問EntityManager
。最簡單的實現(xiàn)方式是使用@Autowired
、@Inject
、@Resource
或@PersistenceContext
注解之一,通過依賴注入來獲取這些資源。下面的例子適用于JPA存儲庫:
@Repository
public class JpaMovieFinder implements MovieFinder {
@PersistenceContext
private EntityManager entityManager;
// ...
}
如果你使用經(jīng)典的Hibernate API,可以注入SessionFactory
,如下例所示:
@Repository
public class HibernateMovieFinder implements MovieFinder {
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// ...
}
最后一個示例是針對典型的JDBC支持。可以將DataSource
注入到初始化方法或構(gòu)造函數(shù)中,在那里可以使用這個DataSource
創(chuàng)建一個JdbcTemplate
以及其他數(shù)據(jù)訪問支持類(如SimpleJdbcCall
等)。下面的例子自動裝配了一個DataSource
:
@Repository
public class JdbcMovieFinder implements MovieFinder {
private JdbcTemplate jdbcTemplate;
@Autowired
public void init(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// ...
}
原文鏈接:https://blog.csdn.net/panghuangang/article/details/136676679
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2021-12-14 如何利用C語言輸出3D立體感心形圖詳解_C 語言
- 2022-03-27 3個適合新手練習(xí)的python小游戲_python
- 2023-01-14 C++應(yīng)用Eigen庫對應(yīng)實現(xiàn)matlab中部分函數(shù)問題_C 語言
- 2022-07-12 weui省市區(qū)三級聯(lián)動
- 2022-07-22 Idea操作普通項目變?yōu)閙aven項目
- 2022-05-05 Entity?Framework使用LINQ操作實體_實用技巧
- 2022-05-01 教你利用python如何讀取txt中的數(shù)據(jù)_python
- 2022-12-10 C++?Boost?Spirit進階教程_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支