spring-DAO
使用DAO ( Data Access Object ,數據訪問對象)設計模式,以便將低級別的數據訪問邏輯與高級別的業務邏輯分離。
Spring中的DAO層能夠以一致的方式輕松處理JDBC 、Hibernate或JPA等數據的訪問技術,這使得可以相當容易地在上述持久化技術之間進行切換。
同時,Spring 的DAO層對各種技術的異常進行了封裝,以便開發者能夠使用統一的異常,而無須擔心捕捉每種技術特有的異常。
一致性異常層次結構
Spring將特定于技術的異常(如SQLException),統一轉換為其自己的異常類層次結構,并將DataAccessException作為根異常以方便轉換。這些異常包裝了原始異常,因此不會丟失原始異常的出錯信息。
除了JDBC異常外,Spring還可以封裝Hibernate特定的異常,將它們轉換為一組專注的運行時的異常(對于JPA 異常也是如此)。這使得開發過程變得簡便了,因為無須在DAO中編寫煩瑣的catch-and-throw代碼塊和異常聲明。同時,JDBC異常(包括特定于數據庫的方言)由于已經轉換為相同的層次結構,這意味著可以在一致的編程模型中使用JDBC 的執行操作。
以上列舉的Spring的各種模板類支持各種ORM 框架。如果使用基于攔截器的類,那么程序必須關心并處理HibernateExceptions和PersistenceExceptions本身,最好是通過分別授權給SessionFactoryUtils的convertHibernateAccessException( .. ) 或convertJpaAccessException()方法。這些方法將異常轉換為與org.spri ngframework. dao中異常層級兼容的異常。由于PersistenceExceptions 沒有被檢查,它可以被簡單地拋出,這也犧牲了DAO在異常上的抽象。
DAO和repository類注解
在領域驅動設計( Domain-Driven Design, DDD )領域,與數據存儲交互的領域概念被稱為存儲庫( Repository ) 。所以在Spring框架中,使用@Repository注解來表示DAO 層是最合適不過的。
該注解還允許組件掃描查找和配置DAO及存儲庫,而無須為它們提供XML 配置條目。
任何DAO或存儲庫的實現都需要訪問持久性資源,具體取決于所使用的持久化技術。例如,基于JDBC的存儲庫需要訪問JDBC數據源,而基于JPA 的存儲庫將需要訪問EntityManager。最簡單的方法是使用@Autowired 、@Inject 、@Resource 或@PersistenceContext 等注解,來將此資源依賴項進行注入。
JPA持久庫
@Repository public class JpaMovieFinder implements MovieFinder {@PersistenceContextprivate EntityManager entityManager;// ...}?Hibernate API,注入sessionFactory
@Repository public class HibernateMovieFinder implements MovieFinder {private SessionFactory sessionFactory;@Autowiredpublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}// ...}JDBC
@Repository public class JdbcMovieFinder implements MovieFinder {private JdbcTemplate jdbcTemplate;@Autowiredpublic void init(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}// ...}?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的spring-DAO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring-others
- 下一篇: spring-JDBC