日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Spring Framework對DAO(Data Access Object)的支持

作者:聽海邊濤聲 更新時間: 2024-03-15 編程語言

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)用程序必須自行處理HibernateExceptionsPersistenceExceptions,最好是分別委托給SessionFactoryUtilsconvertHibernateAccessException(..)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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新