<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

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

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

     

    將此文章收藏到豌豆網(wǎng)

    3、除去工廠類以及相應(yīng)的配置文件

    除去DaoConfig.java這個DAO工廠類和相應(yīng)的配置文件dao.xml,因為DAO的獲取現(xiàn)在要用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)建一個數(shù)據(jù)源dataSource,在這里配置的是hsqldb數(shù)據(jù)庫。如果是ORACLE數(shù)據(jù)庫,driverClassName的值是"oracle.jdbc.driver.OracleDriver",URL的值類似于"jdbc:oracle:thin:@wugfMobile:1521:cdcf"。數(shù)據(jù)源現(xiàn)在由spring來管理,那么現(xiàn)在我們就可以去掉properties目錄下database.properties這個配置文件了;還有不要忘記修改sql-map-config.xml,去掉 對它的引用。

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

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

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

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

    3.5. 業(yè)務(wù)層

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

    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,其實現(xiàn)類是com.ibatis.jpetstore.service.OrderService,分別引用了ItemDao,OrderDao,SequenceDao。該bean的insert*實現(xiàn)了事務(wù)管理(AOP方式)。TransactionProxyFactoryBean自動創(chuàng)建一個事務(wù)advisor, 該advisor包括一個基于事務(wù)屬性的pointcut,因此只有事務(wù)性的方法被攔截。

    2、業(yè)務(wù)類的修改,以O(shè)rderService為例:

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


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

    4. 結(jié)束語

    ibatis是一個功能強大實用的SQL Map工具,可以直接控制SQL,為系統(tǒng)設(shè)計提供了更大的自由空間。其提供的最新示例程序JpetStore 4.0,設(shè)計優(yōu)雅,應(yīng)用了迄今為止很多最佳實踐和設(shè)計模式,非常適于學(xué)習(xí)以及在此基礎(chǔ)上創(chuàng)建輕量級的J2EE WEB應(yīng)用程序。JpetStore 4.0是基于struts的,本文在此基礎(chǔ)上,最大程度保持了原有設(shè)計的精華以及最小的代碼改動量,在業(yè)務(wù)層和持久化層引入了Spring。在您閱讀了本文以及改造后的源代碼后,會深切的感受到Spring帶來的種種好處:自然的面向接口的編程,業(yè)務(wù)對象的依賴注入,一致的數(shù)據(jù)存取框架和聲明式的事務(wù)處理,統(tǒng)一的配置文件…更重要的是Spring既是全面的又是模塊化的,Spring有分層的體系結(jié)構(gòu),這意味著您能選擇僅僅使用它任何一個獨立的部分,就像本文,而它的架構(gòu)又是內(nèi)部一致。
    posted on 2007-12-05 15:41 禮物 閱讀(331) 評論(0)  編輯  收藏 所屬分類: ibatis + spring
    主站蜘蛛池模板: 成人免费无遮挡无码黄漫视频| 亚洲欧洲日产专区| 久久亚洲精品无码| 亚洲人和日本人jizz| 最近最新高清免费中文字幕| 边摸边吃奶边做爽免费视频99 | 免费在线观看一级片| 两个人看的www免费视频| 两个人日本免费完整版在线观看1 两个人的视频www免费 | 91av视频免费在线观看| 亚洲最大免费视频网| 91精品免费在线观看| 四虎在线视频免费观看| 麻豆成人精品国产免费| 免费国产成人午夜私人影视| 亚洲精品无码99在线观看| 亚洲午夜福利在线观看| 亚洲AV无码成人精品区蜜桃| 亚洲视频免费播放| 亚洲精品456人成在线| 免费无码AV一区二区| 中文在线观看免费网站| 99视频免费播放| 国产在线国偷精品产拍免费| 国产一区二区三区在线免费观看 | 天天看片天天爽_免费播放| 国产男女猛烈无遮挡免费网站| 免费一级毛片正在播放| 一本久久a久久精品亚洲| 99人中文字幕亚洲区| 亚洲乱人伦精品图片| 边摸边吃奶边做爽免费视频99| 99久久成人国产精品免费| 59pao成国产成视频永久免费| 青青青青青青久久久免费观看 | 国产成人精品免费视频网页大全| 午夜网站免费版在线观看| 亚洲综合色成在线播放| 亚洲欧洲精品久久| 真正全免费视频a毛片| 中文字幕免费不卡二区|