天天看點

Spring 5 中文解析資料存儲篇-DAO支援

Spring核心篇章: Spring 5 中文解析之核心篇-IoC容器 Spring 5 中文解析核心篇-IoC容器之依賴關系 Spring 5 中文解析核心篇-IoC容器之Bean作用域 Spring 5 中文解析核心篇-IoC容器之自定義Bean性質 Spring 5 中文解析核心篇-IoC容器之BeanDefinition繼承與容器拓展點 Spring 5 中文解析核心篇-IoC容器之基于注解的容器配置 Spring 5 中文解析核心篇-IoC容器之類路徑掃描群組件管理 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?__biz=MzA3NDgzODYzNg==&tempkey=MTA3OV91TU8vcGlxSXdvTGNhZ2o0a3p2RXZvSGpJeXNCMmNCUkszbU9OZzVSc09rT19Zejl6b3JCWHZHU0JfN3ZrVDhhbzZUV3BfS2s3aHFEakhPb3V4dXVkMVp4ajFfZllOcnM2N3huU2d1ZUJZZlN6T1lZNVVKWHJjOWRkdEg3Uzg3RmpFRzZXbHMzQ3lFUUEwd1JqTl9JOGZzWGxMYWh6N1lhY05DYnFRfn4%3D&chksm=1f7b0caa280c85bcce8c4ffe9fb21629f683d5d9127116dae91dc9b9cbd2f367a19514fef76f#rd) [Spring 5 中文解析資料存儲篇-@Transactional使用 https://mp.weixin.qq.com/s?__biz=MzA3NDgzODYzNg==&tempkey=MTA3OV9RNU1VNnhsa0ZkRlhBb3Fla3p2RXZvSGpJeXNCMmNCUkszbU9OZzVSc09rT19Zejl6b3JCWHZHU0JfNTZ4dWhENjFrNUV6dlpieWYxVndQRlBNNkFRZVBFWlVyZHdiQlhTMmZMM0g0TnppT040Nk5QUU1rcEpNY2FDN09nZnNPeG5WTU8wajZCNUowaHZnTHhZcGpYdVRlNXQzWTZUSV8yOEpJNl9nfn4%3D&chksm=1f7b0cb3280c85a5682b1c9ea3cf7d2a69abdd6fe9147ed4335a5d5cfbef7c04ed314bd389de#rd) Spring 5 中文解析資料存儲篇-程式設計式事物管理 完整 電子書位址 Spring對資料通路對象(DAO)的支援旨在使以一緻的方式輕松使用資料通路技術(例如

JDBC

Hibernate

JPA

)。這使你可以輕松地在上述持久性技術之間進行切換,并且還使你無需擔心捕獲每種技術特有的異常即可進行編碼。

2.1 一緻的異常層次結構

Spring提供了從特定于技術的異常(例如

SQLException

)到其自己的異常類層次結構的便捷轉換,該異常類層次結構以

DataAccessException

作為根異常。這些異常包裝了原始異常,是以你永遠不會丢失任何有關可能出錯的資訊。

除了

JDBC

異常,Spring還可以包裝

JPA

Hibernate

特定的異常,将它們轉換為一組集中的運作時異常。這樣,你就可以僅在适當的層中處理大多數不可恢複的持久性異常,而不必在DAO中使用煩人的樣闆捕獲和抛出塊以及異常聲明。(盡管如此,你仍然可以在任何需要的地方捕獲和處理異常。)如上所述,

JDBC

異常(包括特定于資料庫的方言)也被轉換為相同的層次結構,這意味着你可以在一緻的程式設計模型中使用

JDBC

執行某些操作。

在Spring對各種ORM架構的支援中,上述讨論對于各種模闆類均适用。如果使用基于攔截器的類,應用程式必須關心處理

HibernateExceptions

PersistenceExceptions

本身,最好是通過分别委托給

SessionFactoryUtils

convertHibernateAccessException(..)

convertJpaAccessException()

方法。這些方法将異常轉換為與

org.springframework.dao

異常層次結構中的異常相容的異常。由于未選中

PersistenceException

,是以它們也可能被抛出(不過,在異常方面犧牲了通用的DAO抽象)。

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

DataAccessException

層次結構的子集。)

Spring 5 中文解析資料存儲篇-DAO支援
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/liyong1028826685

微信公衆号:

Spring 5 中文解析資料存儲篇-DAO支援

技術交流群:

Spring 5 中文解析資料存儲篇-DAO支援