Spring 5 中文解析數據存儲篇-DAO支持

Spring核心篇章:html

Spring 5 中文解析之核心篇-IoC容器java

Spring 5 中文解析核心篇-IoC容器之依賴關係git

Spring 5 中文解析核心篇-IoC容器之Bean做用域spring

Spring 5 中文解析核心篇-IoC容器之自定義Bean性質數據庫

Spring 5 中文解析核心篇-IoC容器之BeanDefinition繼承與容器拓展點編程

Spring 5 中文解析核心篇-IoC容器之基於註解的容器配置微信

Spring 5 中文解析核心篇-IoC容器之類路徑掃描和組件管理session

Spring 5 中文解析核心篇-IoC容器之JSR330標準註解框架

Spring 5 中文解析核心篇-IoC容器之基於Java容器配置分佈式

Spring 5 中文解析核心篇-IoC容器之Environment抽象

Spring 5 中文解析核心篇-IoC容器之ApplicationContext與BeanFactory

Spring 5 中文解析核心篇-IoC容器之Resources

Spring 5 中文解析核心篇-IoC容器之數據校驗、數據綁定和類型轉換

Spring 5 中文解析核心篇-IoC容器之SpEL表達式

Spring 5 中文解析核心篇-IoC容器之AOP編程(上)")

Spring 5 中文解析核心篇-IoC容器之AOP編程(下)")

Spring 5 中文解析核心篇-IoC容器之Spring AOP API

Spring測試篇章:

Spring 5 中文解析測試篇-Spring測試

Spring 5 中文解析核心篇-集成測試之概要和集成測試註解

Spring 5 中文解析核心篇-集成測試之TestContext(上)")

Spring 5 中文解析核心篇-集成測試之TestContext(中)")

Spring 5 中文解析測試篇-集成測試之TestContext(下)")

Spring 5 中文解析測試篇-Spring MVC測試框架

Spring 5 中文解析測試篇-WebTestClient

Spring存儲篇章:

Spring 5 中文解析數據存儲篇-Spring框架的事物支持模型的優點

[Spring 5 中文解析數據存儲篇-事務同步和聲明式事物管理
](https://mp.weixin.qq.com/s?__...

[Spring 5 中文解析數據存儲篇-@Transactional使用
](https://mp.weixin.qq.com/s?__...

Spring 5 中文解析數據存儲篇-編程式事物管理

完整電子書地址

Spring對數據訪問對象(DAO)的支持旨在使以一致的方式輕鬆使用數據訪問技術(例如JDBCHibernateJPA)。這使你能夠輕鬆地在上述持久性技術之間進行切換,而且還使你無需擔憂捕獲每種技術特有的異常便可進行編碼。

2.1 一致的異常層次結構

Spring提供了從特定於技術的異常(例如SQLException)到其本身的異常類層次結構的便捷轉換,該異常類層次結構以DataAccessException做爲根異常。這些異常包裝了原始異常,所以你永遠不會丟失任何有關可能出錯的信息。

除了JDBC異常,Spring還能夠包裝JPAHibernate特定的異常,將它們轉換爲一組集中的運行時異常。這樣,你就能夠僅在適當的層中處理大多數不可恢復的持久性異常,而沒必要在DAO中使用煩人的樣板捕獲和拋出塊以及異常聲明。(儘管如此,你仍然能夠在任何須要的地方捕獲和處理異常。)如上所述,JDBC異常(包括特定於數據庫的方言)也被轉換爲相同的層次結構,這意味着你能夠在一致的編程模型中使用JDBC執行某些操做。

在Spring對各類ORM框架的支持中,上述討論對於各類模板類均適用。若是使用基於攔截器的類,應用程序必須關心處理HibernateExceptionsPersistenceExceptions自己,最好是經過分別委託給SessionFactoryUtilsconvertHibernateAccessException(..)convertJpaAccessException()方法。這些方法將異常轉換爲與org.springframework.dao異常層次結構中的異常兼容的異常。因爲未選中PersistenceException,所以它們也可能被拋出(不過,在異常方面犧牲了通用的DAO抽象)。

下圖顯示了Spring提供的異常層次結構。(請注意,圖像中詳細說明的類層次結構僅顯示整個DataAccessException層次結構的子集。)

DataAccessException

2.2 用於配置DAO或存儲類的註解

確保你的數據訪問對象(DAO)或存儲庫提供異常轉換的最佳方法是使用@Repository註解。此註解還使組件掃描支持能夠查找和配置DAO和存儲庫,而沒必要爲其提供XML配置。如下示例顯示瞭如何使用@Repository註解:

@Repository //1
public class SomeMovieFinder implements MovieFinder {
    // ...
}
  1. @Repository註解

    任何DAO或存儲庫實現都須要訪問持久性資源,具體取決於所使用的持久性技術。例如,基於JDBC的存儲庫須要訪問JDBC數據源,而基於JPA的存儲庫須要訪問EntityManager。完成此操做的最簡單方法是使用@Autowired@Inject@Resource@PersistenceContext註解之一注入此資源依賴項。如下示例適用於JPA存儲庫:

@Repository
public class JpaMovieFinder implements MovieFinder {

    @PersistenceContext
    private EntityManager entityManager;

    // ...
}

若是使用經典的Hibernate API,則能夠注入SessionFactory,如如下示例所示:

@Repository
public class HibernateMovieFinder implements MovieFinder {

    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    // ...
}

咱們在此顯示的最後一個示例是對典型JDBC支持的。你能夠將DataSource注入初始化方法或構造函數中,在此方法中,你可使用此DataSource建立JdbcTemplate和其餘數據訪問支持類(例如SimpleJdbcCall等)。如下示例自動裝配數據源:

@Repository
public class JdbcMovieFinder implements MovieFinder {

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void init(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    // ...
}
有關如何配置應用程序上下文以利用這些註解的詳細信息,請參見每種持久性技術的特定介紹。

做者

我的從事金融行業,就任過易極付、思建科技、某網約車平臺等重慶一流技術團隊,目前就任於某銀行負責統一支付系統建設。自身對金融行業有強烈的愛好。同時也實踐大數據、數據存儲、自動化集成和部署、分佈式微服務、響應式編程、人工智能等領域。同時也熱衷於技術分享創立公衆號和博客站點對知識體系進行分享。關注公衆號: 青年IT男 獲取最新技術文章推送!

博客地址: http://youngitman.tech

CSDN: https://blog.csdn.net/liyong1...

微信公衆號:

技術交流羣:

相關文章
相關標籤/搜索