MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Hibernate 的確通過 PersistentEnum 接口提供了對標準化 的支持,這使得我們的域對象實現了一個與 ShippingCompany 對象非常類似的結構。然而,我們可能對將域對象與某個特定的持久化實現過于耦合持保守態度。如果我們計劃長期使用 Hibernate ,這可能并不是一個太大的問題,但是請謹慎考慮這個決策。如果我們使用 ibatis ,那么我們就完全沒那么幸運了;它完全不支持標準化。謝天謝地,如果我們的 ORM 導致過耦合或者完全沒有這方面的支持,還有個解決方案——使用 JDBC

          Spring 的支持,使用 JDBC 變得如此簡單,我們不會再因為它的復雜性而將其的優先級打個折扣。可是,如果我們選擇使用某個特定的 ORM 工具,那么我們就很難用基于 JDBC DAO 實現進行替換了——目前我們就是這樣。當我們同時在一個類中包含了 JDBC hibernate 代碼時,我們就無法使用 Spring 提供的支持。因為我們的 DAO 只能擴展 HibernateDaoSupport JdbcDaoSupport 二者之一。幸運的是,這里有一個優雅的解決方案,它允許我們將 Hibernate JDBC 代碼封裝在同一個類之內,而不會因此失去 Spring 的支持。這個方案的關鍵在于將 JDBC 代碼封裝在內部類中,之后將主體 DAO 的調用委托給這個內部類去完成。代碼清單 11-6 提供了一個示例:

          代碼清單 11-16. 在一個單獨的 DAO 中混合使用 Hibernate JDBC

          package com.apress.prospring.ch11.canonicalization;

          ?

          import org.springframework.jdbc.core.support.JdbcDaoSupport;

          import org.springframework.orm.hibernate.support.HibernateDaoSupport;

          ?

          public class MyDao extends HibernateDaoSupport {

          ?

          ?? private MyJdbcDao innerDao;

          ?

          ?? public MyDao() {

          ????? innerDao = new MyJdbcDao();

          ?? }

          ?

          ?? public void update(MyDomainObject obj) {

          ????? // use Hibernate to persist the data

          ?? }

          ?

          ?? public MyDomainObject getById(int someId) {

          ????? return innerDao.getBy(someId);

          ?? }

          ?

          ?? private static class MyJdbcDao extends JdbcDaoSupport {

          ?

          ????? public MyDomainObject getBy(int someId) {

          ???????? // do some real processing

          ???????? return null;

          ????? }

          ?? }

          }

          ?

          盡管這只是一個簡單的實現,我們也可以從中得到啟發。所有的 JDBC 相關代碼都被轉移到一個內部類中,而此內部類擴展了 JdbcDaoSupport , 所有的 Hibernate 相關功能都留在外部,外部類仍然是 HibernateDaoSupport . 的子類。通過這個類,我們可以使用 Hibernate 完成域對象的持久化,但是我們可以將查詢功能交給嵌入的 JDBC DAO 去完成。

          在我們的應用中有效利用標準化 ,可以通過避免大量無謂對象的創建,從而極大提升內存使用效率。如果我們必須更新標準化對象相關的數據,同時我們在 DAO 中使用了 ORM 框架,那么我們就可以以 ORM 無關的形式引入一些 JDBC 代碼來加入標準化 支持。


          來源:Pro Spring中文版 http://book.csdn.net/bookfiles/48/100481407.shtml

          http://hi.baidu.com/%D3%F4%C3%C6%BB%A8%C9%FA%BD%B4/blog/item/7768d41e8c06ceffe0fe0ba6.html

          主站蜘蛛池模板: 会宁县| 仙游县| 奉化市| 屏东市| 左权县| 手游| 正定县| 天镇县| 阜平县| 长乐市| 天气| 湟中县| 烟台市| 沂水县| 阜平县| 东丽区| 凤阳县| 左云县| 普兰县| 仁怀市| 盈江县| 海林市| 峨山| 龙海市| 桦川县| 同江市| 莎车县| 肥乡县| 高唐县| 潜江市| 东城区| 海丰县| 平山县| 龙南县| 玛沁县| 池州市| 武山县| 达州市| 望城县| 洞头县| 五台县|