Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

           

          將此文章收藏到豌豆網

          3、除去工廠類以及相應的配置文件

          除去DaoConfig.java這個DAO工廠類和相應的配置文件dao.xml,因為DAO的獲取現在要用spring來管理。

          4、DAO在Spring中的配置(applicationContext.xml)

          <bean id="dataSource"
                                  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                                  <property name="driverClassName">
                                  <value>org.hsqldb.jdbcDriver</value>
                                  </property>
                                  <property name="url">
                                  <value>jdbc:hsqldb:hsql://localhost/xdb</value>
                                  </property>
                                  <property name="username">
                                  <value>sa</value>
                                  </property>
                                  <property name="password">
                                  <value></value>
                                  </property>
                                  </bean>
                                  <!-- ibatis sqlMapClient config -->
                                  <bean id="sqlMapClient"
                                  class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
                                  <property name="configLocation">
                                  <value>
                                  classpath:com\ibatis\jpetstore\persistence\sqlmapdao\sql\sql-map-config.xml
                                  </value>
                                  </property>
                                  <property name="dataSource">
                                  <ref bean="dataSource"/>
                                  </property>
                                  </bean>
                                  <!-- Transactions -->
                                  <bean id="TransactionManager"
                                  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                                  <property name="dataSource">
                                  <ref bean="dataSource"/>
                                  </property>
                                  </bean>
                                  <!-- persistence layer -->
                                  <bean id="AccountDao"
                                  class="com.ibatis.jpetstore.persistence.sqlmapdao.AccountSqlMapDao">
                                  <property name="sqlMapClient">
                                  <ref local="sqlMapClient"/>
                                  </property>
                                  </bean>


          1. 我們首先創(chuàng)建一個數據源dataSource,在這里配置的是hsqldb數據庫。如果是ORACLE數據庫,driverClassName的值是"oracle.jdbc.driver.OracleDriver",URL的值類似于"jdbc:oracle:thin:@wugfMobile:1521:cdcf"。數據源現在由spring來管理,那么現在我們就可以去掉properties目錄下database.properties這個配置文件了;還有不要忘記修改sql-map-config.xml,去掉 對它的引用。

          2. sqlMapClient節(jié)點。這個是針對ibatis SqlMap的SqlMapClientFactoryBean配置。實際上配置了一個sqlMapClient的創(chuàng)建工廠類。configLocation屬性配置了ibatis映射文件的名稱。dataSource屬性指向了使用的數據源,這樣所有使用sqlMapClient的DAO都默認使用了該數據源,除非在DAO的配置中另外顯式指定。

          3. TransactionManager節(jié)點。定義了事務,使用的是DataSourceTransactionManager。

          4. 下面就可以定義DAO節(jié)點了,如AccountDao,它的實現類是com.ibatis.jpetstore.persistence.sqlmapdao.AccountSqlMapDao,使用的SQL配置從sqlMapClient中讀取,數據庫連接沒有特別列出,那么就是默認使用sqlMapClient配置的數據源datasource。

          這樣,我們就把持久層改造完了,其他的DAO配置類似于AccountDao。怎么樣?簡單吧。這次有接口了:) AccountDao接口->AccountSqlMapDao實現。

          3.5. 業(yè)務層

          業(yè)務層的位置以及相關類,如下圖所示:在這個例子中只有3個業(yè)務類,我們以OrderService類為例來改造,這個類是最復雜的,其中涉及了事務。

          1、在ApplicationContext配置文件中增加bean的配置:

          <bean id="OrderService"
                                  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                                  <property name="transactionManager">
                                  <ref local="TransactionManager"></ref>
                                  </property>
                                  <property name="target">
                                  <bean class="com.ibatis.jpetstore.service.OrderService">
                                  <property name="itemDao">
                                  <ref bean="ItemDao"/>
                                  </property>
                                  <property name="orderDao">
                                  <ref bean="OrderDao"/>
                                  </property>
                                  <property name="sequenceDao">
                                  <ref bean="SequenceDao"/>
                                  </property>
                                  </bean>
                                  </property>
                                  <property name="transactionAttributes">
                                  <props>
                                  <prop key="insert*">PROPAGATION_REQUIRED</prop>
                                  </props>
                                  </property>
                                  </bean>


          定義了一個OrderService,還是很容易懂的。為了簡單起見,使用了嵌套bean,其實現類是com.ibatis.jpetstore.service.OrderService,分別引用了ItemDao,OrderDao,SequenceDao。該bean的insert*實現了事務管理(AOP方式)。TransactionProxyFactoryBean自動創(chuàng)建一個事務advisor, 該advisor包括一個基于事務屬性的pointcut,因此只有事務性的方法被攔截。

          2、業(yè)務類的修改,以OrderService為例:

          public class OrderService {
                                  /* Private Fields */
                                  private ItemDao itemDao;
                                  private OrderDao orderDao;
                                  private SequenceDao sequenceDao;
                                  /* Constructors */
                                  public OrderService() {
                                  }
                                  /**
                                  * @param itemDao 要設置的 itemDao。
                                  */
                                  public final void setItemDao(ItemDao itemDao) {
                                  this.itemDao = itemDao;
                                  }
                                  /**
                                  * @param orderDao 要設置的 orderDao。
                                  */
                                  public final void setOrderDao(OrderDao orderDao) {
                                  this.orderDao = orderDao;
                                  }
                                  /**
                                  * @param sequenceDao 要設置的 sequenceDao。
                                  */
                                  public final void setSequenceDao(SequenceDao sequenceDao) {
                                  this.sequenceDao = sequenceDao;
                                  }
                                  //剩下的部分
                                  …….
                                  }


          紅色部分為修改部分。Spring采用的是Type2的設置依賴注入,所以我們只需要定義屬性和相應的設值函數就可以了,ItemDao,OrderDao,SequenceDao的值由spring在運行期間注入。構造函數就可以為空了,另外也不需要自己編寫代碼處理事務了(事務在配置中聲明),daoManager.startTransaction();等與事務相關的語句也可以去掉了。和原來的代碼比較一下,是不是處理精簡了很多!可以更關注業(yè)務的實現。

          4. 結束語

          ibatis是一個功能強大實用的SQL Map工具,可以直接控制SQL,為系統設計提供了更大的自由空間。其提供的最新示例程序JpetStore 4.0,設計優(yōu)雅,應用了迄今為止很多最佳實踐和設計模式,非常適于學習以及在此基礎上創(chuàng)建輕量級的J2EE WEB應用程序。JpetStore 4.0是基于struts的,本文在此基礎上,最大程度保持了原有設計的精華以及最小的代碼改動量,在業(yè)務層和持久化層引入了Spring。在您閱讀了本文以及改造后的源代碼后,會深切的感受到Spring帶來的種種好處:自然的面向接口的編程,業(yè)務對象的依賴注入,一致的數據存取框架和聲明式的事務處理,統一的配置文件…更重要的是Spring既是全面的又是模塊化的,Spring有分層的體系結構,這意味著您能選擇僅僅使用它任何一個獨立的部分,就像本文,而它的架構又是內部一致。
          posted on 2007-12-05 15:41 禮物 閱讀(334) 評論(0)  編輯  收藏 所屬分類: ibatis + spring
          主站蜘蛛池模板: 阳新县| 繁峙县| 达孜县| 南京市| 姜堰市| 绥中县| 芮城县| 汉中市| 苏尼特左旗| 吴忠市| 九江市| 贵州省| 洛川县| 泸州市| 华蓥市| 璧山县| 克拉玛依市| 吴桥县| 鄂伦春自治旗| 桐城市| 苏尼特左旗| 铅山县| 兰西县| 买车| 洛川县| 全南县| 调兵山市| 苗栗市| 安宁市| 怀宁县| 前郭尔| 全南县| 新巴尔虎右旗| 临安市| 轮台县| 桦南县| 会昌县| 应城市| 邛崃市| 定结县| 玛沁县|