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

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

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

    posts - 11,  comments - 28,  trackbacks - 0
         摘要: JpetStore提供了一個整套的測試代碼對于想進行單元測試卻不知道如何進行單元測試的人(me)來說,是一個很好的學習機會。
    JpetStore的單元測試代碼與它的系統源文件是獨立分離的,在test文件夾中。打開文件夾可以很清楚的發現該文件夾的內容組成結構與源文件基本一致。
    JpetStore分為領域層(domain),持久層(peristence),服務層(service),表現層(presentation),它的測試也分這幾個層來進行。  閱讀全文
    posted @ 2007-01-22 15:18 滌生 閱讀(3333) | 評論 (0)編輯 收藏
         摘要: 本文是在參閱了http://ivanl.javaeye.com/blog/24739基礎上完成的
    在看JPetStore的代碼時,發現它的分頁處理主要是通過返回PaginatedList對象來完成的。如:在CatalogService類中
    public PaginatedList getProductListByCategory(String categoryId) {
    return productDao.getProductListByCategory(categoryId);
    }
    分頁是操作數據庫型系統常遇到的問題。分頁實現方法很多,但效率的差異就很大了。iBatis是通過什么方式來實現這個分頁的了。查看它的實現部分:   閱讀全文
    posted @ 2007-01-18 16:27 滌生 閱讀(8459) | 評論 (6)編輯 收藏
    關鍵字: OO ? UML,泛化,依賴,關聯,聚合????

    類與類之間的關系對于理解面向對象具有很重要的作用,以前在面試的時候也經常被問到這個問題,在這里我就介紹一下。
    類與類之間存在以下關系:
    (1)泛化(Generalization)
    (2)關聯(Association)
    (3)依賴(Dependency)
    (4)聚合(Aggregation)

    UML圖與應用代碼例子:
    1.泛化(Generalization)
    [泛化]
    表示類與類之間的繼承關系,接口與接口之間的繼承關系,或類對接口的實現關系。一般化的關系是從子類指向父類的,與繼承或實現的方法相反。
    [具體表現]
    父類 父類實例=new 子類()
    [UML圖](圖1.1)

    圖1.1Animal類與Tiger類,Dog類的泛化關系

    [代碼表現]

    1. class ?Animal{} ??
    2. class ?Tiger? extends ?Animal{} ??
    3. public ? class ?Test ??
    4. { ??
    5. ???? public ? void ?test() ??
    6. ????{ ??
    7. ????????Animal?a= new ?Tiger(); ??
    8. ????} ??
    9. }??

    2.依賴(Dependency)
    [依賴]
    對于兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關系。
    [具體表現]
    依賴關系表現在局部變量方法的參數,以及對靜態方法的調用
    [現實例子]
    比如說你要去擰螺絲,你是不是要借助(也就是依賴)螺絲刀(Screwdriver)來幫助你完成擰螺絲(screw)的工作
    [UML表現](圖1.2)


    圖1.2 Person類與Screwdriver類的依賴關系

    [代碼表現]

    1. public?class?Person{ ??
    2. ????/**?擰螺絲?*/??
    3. ????public?void?screw(Screwdriver?screwdriver){ ??
    4. ????????screwdriver.screw(); ??
    5. ????} ??
    6. }??

    3.關聯(Association)
    [關聯]
    對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。
    [具體表現]
    關聯關系是使用實例變量來實現
    [現實例子]
    比如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司
    [UML圖] (圖1.3)

    圖1.3 公司和員工的關聯關系


    [代碼表現]
    1. public?class?Company{ ??
    2. ????private?Employee?employee; ??
    3. ????public?Employee?getEmployee(){ ??
    4. ????????return?employee; ??
    5. ????} ??
    6. ????public?void?setEmployee(Employee?employee){ ??
    7. ????????this.employee=employee; ??
    8. ????} ??
    9. ????//公司運作 ??
    10. ????public?void?run(){ ??
    11. ????????employee.startWorking(); ??
    12. ????} ??
    13. }??
    (4)聚合(Aggregation)
    [聚合]
    當對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚集關系。聚合是關聯關系的一種,是較強的關聯關系,強調的是整體部分之間的關系。
    [具體表現]
    與關聯關系一樣,聚合關系也是通過實例變量來實現這樣關系的。關聯關系和聚合關系來語法上是沒辦法區分的,從語義上才能更好的區分兩者的區別。
    [關聯與聚合的區別]
    (1)關聯關系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關聯關系,而不是聚合關系,因為人不是由自行車組成的。
    聚合關系涉及的兩個對象處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主板以及內存就是聚集關系,因為主板是電腦的組成部分。
    (2)對于具有聚集關系(尤其是強聚集關系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內存)拆了下來。
    [UML圖](圖1.4)

    圖1.3 電腦和組件的聚合關系

    [代碼表現]
    1. public?class?Computer{ ??
    2. ????private?CPU?cpu; ??
    3. ????public?CPU?getCPU(){ ??
    4. ????????return?cpu; ??
    5. ????} ??
    6. ????public?void?setCPU(CPU?cpu){ ??
    7. ????????this.cpu=cpu; ??
    8. ????} ??
    9. ????//開啟電腦 ??
    10. ????public?void?start(){ ??
    11. ????????//cpu運作 ??
    12. ????????cpu.run(); ??
    13. ????} ??
    14. }??

    posted @ 2007-01-17 10:07 滌生 閱讀(575) | 評論 (0)編輯 收藏
         摘要: 本文參考了
    iBatis DAO入門與進階(http://www.matrix.org.cn/resource/article/44/44058_iBatis+DAO.html)
    iBatis DAO事務探索(http://www.tkk7.com/RongHao/archive/2006/01/20/28817.html)

    今天繼續研究了JPetStore的持久層,其中由于看了一篇文章的誤導,導致我對其中的事務處理深表懷疑。通過閱讀源代碼與看上面兩篇文章,對這個問題才認識清楚。和我當初預想的一致。
      閱讀全文
    posted @ 2007-01-16 21:15 滌生 閱讀(2804) | 評論 (2)編輯 收藏
         摘要: 問題就出現在這,Item類中包含了Product類,出現NestedSqlException錯誤。
    查閱了ibatis幫助,此處sql_map的嵌套類寫法是正確的。我又將這個sql語句拷貝到MsSqlServer中執行,結果也是正確的。陷入困惑。
      閱讀全文
    posted @ 2007-01-16 13:38 滌生 閱讀(3364) | 評論 (6)編輯 收藏
    今天在看JPetStore代碼時,對他的鏈接中的請求參數感到疑惑,最后發現是自己的對Struts框架不熟悉導致的。
    我是從Net陣營中剛轉入Java里的,在Net中對請求參數的名稱無特殊限制,只要在頁面中取參數的值即可。當然這個功能在Java中也具備。即request.Getparameter()

    今天我在看JpetStore代碼時,在點擊
    http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?categoryId=BIRDS
    時,當跟蹤函數viewCategory時發現此時categoryID已經賦值了,我卻找不到在什么地方賦值的,好是花費了一番周執。
    查看此段鏈接對應的struts.xml

    ????
    <action?path="/shop/viewCategory"?type="org.apache.struts.beanaction.BeanAction"
    ????????????name
    ="catalogBean"?scope="session"
    ????????????validate
    ="false">
    ??????
    <forward?name="success"?path="/catalog/Category.jsp"/>
    我首先跟蹤BeanAction的excute函數發現在此之前就已經賦值,說明和BeanAction無關,是Struts系統本身的結構。我故意將鏈接修改,修改成
    http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?category=BIRDS
    此時出現錯誤,錯誤如下:
    java.lang.IllegalArgumentException:?Cannot?invoke?com.ibatis.jpetstore.presentation.CatalogBean.setCategory?-?argument?type?mismatch
    ????org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:
    1778)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:
    1759)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:
    1648)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:
    1677)
    ????org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:
    1022)
    ????org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:
    811)
    ????org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:
    298)
    ????org.apache.struts.util.RequestUtils.populate(RequestUtils.java:
    493)
    ????org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:
    805)
    ????org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
    203)
    ????org.apache.struts.action.ActionServlet.process(ActionServlet.java:
    1194)
    ????org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
    414)
    ????javax.servlet.http.HttpServlet.service(HttpServlet.java:
    689)
    ????javax.servlet.http.HttpServlet.service(HttpServlet.java:
    802)
    根據這個錯誤堆棧可知,它實際上采用的是反射,setProperty,此時找不到category的Setter函數報錯。然后我查看了一下RequestProcessor的默認實現代碼
    //?Process?any?ActionForm?bean?related?to?this?request
    ActionForm?form?=?processActionForm(request,?response,?mapping);
    processPopulate(request,?response,?form,?mapping);
    這段函數功能為:
    1)調用processActionForm( )方法檢查是否存在為ActionMapping配置的ActionForm 。如果存在,則在有效區
    域內查找是否存在該ActionForm 的實例,存在,則復用,不存在,則創建一個實例。然后將實例保存與再配置
    文件中配置好的有效區域(request,session,application)內,并用Action元素的name屬性作為該實例的關鍵字。
    2)調用processPopulate( )方法,如果存來存在為ActionMapping配置的ActionForm,則封裝請求對象中的數據
    到ActionForm 中,在進行封裝之前,先調用ActionForm 的reset( )方法進行屬性值的默認化。

    根據以上的分析,可得知,在調用鏈接前struts框架會自動的將所有的請求參數封裝入指定的formbean中。所以請求參數的名稱應該是對應formbean的一個屬性。

    這就是struts中請求參數的處理過程。主要是我對struts還沒有完全掌握,加上Net的影響,才花費了一圈發現這個原因。
    posted @ 2007-01-15 20:56 滌生 閱讀(969) | 評論 (0)編輯 收藏

    JpetStore中的Action與普通Struts的Action處理方式不一樣。遍歷JpetStore的src文件夾,并無一個具體的Action,那么它是如何來完成普通Struts的Action工作了?
    查看JpetStore的Struts.xml可以發現,它的Action只有一個,即“org.apache.stuts.beanaction.Beanaction”。通過Eclipse查看beanaction.jar的源代碼,可以發現Beanaction繼承與普通Action,即具備普通的action的功能。那么它無具體Action的奧妙在哪,繼續研究BeanAction的代碼,截取BeanAction的excute方法中核心部分代碼如下:?
    /*遍歷此方法的業務邏輯可知,*的優先級最高,如果是*,則不調用任何方法直接Forward,類似于ForwardAction*/?
    private?static?final?String?NO_METHOD_CALL?=?"*";?
    …….?
    /*所有的FormBean都繼承于BaseBean*/?
    BaseBean?bean?
    =?(BaseBean)?form;?
    ??????ActionContext.initCurrentContext(request,?response);?
    ??????
    if?(bean?!=?null)?{?
    ????????
    //?Explicit?Method?Mapping?
    /*下面是檢查struts.xml配置中是否有parameter屬性*/?
    ????????Method?method?
    =?null;?
    ????????String?methodName?
    =?mapping.getParameter();?
    ????????
    if?(methodName?!=?null?&&?!NO_METHOD_CALL.equals(methodName))?{?
    ??????????
    try?{?
    /*通過反射,根據得到的方法名稱取得方法的句柄*/?
    ????????????method?
    =?bean.getClass().getMethod(methodName,?null);?
    ????????????
    synchronized?(bean)?{?
    /*下面是關鍵一句,調用basebean擁有的接口ActionInterceptor的實現DefaultActionInterceptor,來完成具體方法的調用*/?
    ??????????????forward?
    =?bean.getInterceptor().intercept(new?ActionInvoker(bean,?method));?
    ????????????}
    ?
    ?????????……..?
    /*無Parameter屬性,檢查path路徑的最后一個/后的名稱,即為調用的方法名*/?
    ????????
    //?Path?Based?Method?Mapping?
    ????????if?(method?==?null?&&?!NO_METHOD_CALL.equals(methodName))?{?
    ??????????methodName?
    =?mapping.getPath();?
    ??????????
    if?(methodName.length()?>?1)?{?
    ????????????
    int?slash?=?methodName.lastIndexOf("/")?+?1;?
    ????????????methodName?
    =?methodName.substring(slash);?
    ????????????
    if?(methodName.length()?>?0)?{?
    ??????????????
    try?{?
    ????????????????method?
    =?bean.getClass().getMethod(methodName,?null);?
    ????????????????
    synchronized?(bean)?{?
    ??????????????????forward?
    =?bean.getInterceptor().intercept(new?ActionInvoker(bean,?method));?
    ????????????????}
    ?
    ?????????????……..?
    /*根據調用方法返回的String,得到頁面的轉移路徑*/?
    return?mapping.findForward(forward);?
    ?
    通過研究上面這段代碼,我們可知,JpetStore中沒有具體Action實現的關鍵原因即在于下面這幾句
    /*通過反射,根據得到的方法名稱取得方法的句柄*/?
    ????????????method?
    =?bean.getClass().getMethod(methodName,?null);?
    ????????????
    synchronized?(bean)?{?
    /*下面是關鍵一句,調用basebean擁有的接口ActionInterceptor的實現DefaultActionInterceptor,來完成具體方法的調用*/?
    ??????????????forward?
    =?bean.getInterceptor().intercept(new?ActionInvoker(bean,?method));?
    ????????????}
    ?
    即將原來Action中的excute方法的實現轉移到FormBean中,這樣實現顯得更為簡捷,方便。研究ActionInvoke,它的核心代碼如下:
    public?String?invoke()?{?
    ????
    try?{?
    ??????
    return?(String)?method.invoke(bean,?null);?
    ????}
    ?catch?(Exception?e)?{?
    ??????
    throw?new?BeanActionException("Error?invoking?Action.??Cause:?"?+?e,?e);?
    ????}
    ?
    ??}
    ?
    至此可知,它調用的是formbean中的函數。且從這段代碼可知,formbean的這類特殊函數,此處稱為action方法,要符合兩個特征:1)無參數;2)返回值為string,此返回string即是Struts-config.xml的全局或局部的forward。
    以上是整個beanaction的實現機制。個人感覺此種實現方法對于開發者而言已經類似于ASP.NET的.aspx與.cs開發模式了。下面是通過實例來說明一下BeanAction如何控制formbean的
    ?
    Struts-config.xml的配置里有3種映射方式,來告訴BeanAction把控制轉到哪個form bean對象的哪個方法來處理。
    (1)parameter=”*’直接跳轉;(2)Parameter中含具體的方法名;(3)Path中最后一個/后的方法名
    以這個請求連接為例http://localhost/jpetstore4/shop/viewOrder.shtml
    1. URL Pattern

    ???
    <action?path="/shop/viewOrder"?type="com.ibatis.struts.BeanAction"
    ????name
    ="orderBean"?scope="session"
    ????validate
    ="false">
    ????
    <forward?name="success"?path="/order/ViewOrder.jsp"/>
    ??
    </action>

    ?
    此種方式表示,控制將被轉發到"orderBean"這個form bean對象 的"viewOrder"方法(行為)來處理。方法名取"path"參數的以"/"分隔的最后一部分。
    2. Method Parameter?
    <action?path="/shop/viewOrder"?type="com.ibatis.struts.BeanAction"
    ????name
    ="orderBean"?parameter="viewOrder"?scope="session"
    ????validate
    ="false">
    ????
    <forward?name="success"?path="/order/ViewOrder.jsp"/>
    ??
    </action>

    ?
    此種方式表示,控制將被轉發到"orderBean"這個form bean對象的"viewOrder"方法(行為)來處理。配置中的"parameter"參數表示form bean類上的方法。"parameter"參數優先于"path"參數。
    3. No Method call
    ?<action?path="/shop/viewOrder"?type="com.ibatis.struts.BeanAction"
    ????name
    ="orderBean"?parameter="*"?scope="session"
    ????validate
    ="false">
    ????
    <forward?name="success"?path="/order/ViewOrder.jsp"/>
    ??
    </action>

    此種方式表示,form bean上沒有任何方法被調用。如果存在"name"屬性,則struts把表單參數等數據填充到form bean對象后,把控制轉發到"success"。否則,如果name為空,則直接轉發控制到"success"。
    這就相當于struts內置的org.apache.struts.actions.ForwardAction的功能
    <action?path="/shop/viewOrder"?type="org.apache.struts.actions.ForwardAction"
    ????parameter
    ="/order/ViewOrder.jsp?"?scope="session"?validate="false">
    ?
    </action>
    ?

    ?
    posted @ 2007-01-12 16:34 滌生 閱讀(3883) | 評論 (8)編輯 收藏
    對初接觸者來說,到底如何開始使用abator,資源比較少,本文記載了我今日初次使用的過程,希望對和我一樣的初學者有所幫助

    獲得
    ????? http://ibatis.apache.org/abator.html
    ???? Eclipse可以自動的進行Update獲取此Plugin,官方的安裝步驟

    Automatic Eclipse Install

    If you've already installed a prior version of Abator, simply run the Eclipse Install/Update tool and the new version will be found automatically.

    If you've not already installed Abator, then you can use the built in Eclipse install support by following these steps:

    1. Take the "Help>Software Updates>Find and Install" Menu Option
    2. Select the "Search for new features to install" radio button, press "Next"
    3. Press the "New Remote Site" button
    4. Enter the following information:
      Name:
      Abator for Eclipse Update Site
      URL:
      http://ibatis.apache.org/tools/abator
    5. Press OK
    6. Check the box next to "Abator for Eclipse Update Site"
    7. Follow the remainder of the install wizard

    2、安裝好后將在New菜單中看到一個新的文件類型Abator for iBATIS Configuration File,此是Abator的配置文件,配置文件的詳細說明見http://ibatis.apache.org/docs/tools/abator/

    3、新建一個配置文件,進行修改,根據自己的實際需求進行修改
    關鍵點:
    1)jdbcconnection,按照一般的配置即可,需要說明的是它需要指定訪問JdbcDriver的classPathEntry,對于MsSqlServer而言,要將這三個jar文件均包含在內,否則會出現jdbc訪問錯誤。
    2)配置三個Pakage
    3)配置表,此處需說明的是對于MsSqlServer不能寫TableSchema,我初次指定TableSchema,結果未找到對應的表
    簡單的配置如下,復雜的見配置文件的詳細說明。示例配置文件如下
    <abatorConfiguration>
    ? <abatorContext>??? <!-- TODO: Add Database Connection Information -->
    ??? <jdbcConnection driverClass="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    ??????? connectionURL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor"
    ??????? userId="sa"
    ??????? password="sa">
    ????? <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/mssqlserver.jar" />
    ????? <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/msutil.jar" />
    ????? <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/msbase.jar" />
    ??? </jdbcConnection>

    ??? <javaModelGenerator targetPackage="com.dwerp.itatis.domain" targetProject="BhbManage" />
    ??? <sqlMapGenerator targetPackage="com.dwerp.itatis.persistence.xml" targetProject="BhbManage" />
    ??? <daoGenerator type="IBATIS" targetPackage="com.dwerp.itatis.persistence.sqlmapdao" targetProject="BhbManage" />

    ??? <table tableName="BHBGL">
    ????
    ??? </table>

    ? </abatorContext>
    </abatorConfiguration>

    4、右鍵單擊配置文件,點擊Generate iBatis Artifacts,生成文件。

    ?

    posted @ 2007-01-11 21:37 滌生 閱讀(2012) | 評論 (1)編輯 收藏
    學習的最好方法莫過于研究示例程序。本文是鄙人今日在Eclipse中運行iBATIS的JpetStore的記錄,供同仁參考

    1、下載iBAITS(http://ibatis.apache.org/javadownloads.cgi)
    2、下載JPetStore-5.0(http://ibatis.apache.org/javadownloads.cgi)

    準備工作完成,下面開始將示例程序轉移到Eclipse中
    1、在Eclipse中新建一個空的WebProject,如:JPetStore
    2、將下載的JPetStore-5.0文件夾的內容拷貝至JPetStore,其中由于Eclipse默認的Web文件夾是WebRoot所以JPetStore-5.0中的Web文件單獨拷貝到新建的Project的Web文件夾WebRoot下。簡單的是說,就是要保證空的WebProject中的所擁有文件模型不動,將下載的內容拷貝到相應的文件夾下
    3、刷新Eclipse,此時會看到src下顯示為錯誤,錯誤的原因是此時對應的包未引入,由于Eclipse默認的是WebRoot/lib下的包文件,所以將主目錄下即JPetStore/devlib與JPetStore/lib引入到項目中
    有兩種方法:直接將此兩個文件夾下的內容直接拷貝到JPetStore/WebRoot/lib下,或者,通過Import命令引入
    4、至此就已經完成項目遷移工作,下面就是
    1)建數據庫,鄙人用的是MsSqlServer,在JPetStore/src/ddl中有各種數據庫的sql文件
    2)修改iBATIS的database.propertis,見上篇拙作
    3)在Eclipse通過Tomcat部署
    即可看到PetShop的網站了
    http://127.0.0.1:8083/JPetStore

    希望對和我一樣的初學者有所幫助
    posted @ 2007-01-11 21:22 滌生 閱讀(4280) | 評論 (4)編輯 收藏

    希望此文能對初次使用ibatis訪問MsSqlserver的朋友起個借鑒

    1、在http://ibatis.apache.org/javadownloads.cgi下載ibatis,我下載的是2.2.0,由于還沒有看Spring,所以下載此版本,帶 iBATIS DAO 框架。以后版本都不再含有此框架。見網站說明:
    Note: iBATIS 2.2.0 is the last release that includes the iBATIS DAO framework. After 2.2.0, the DAO iBATIS framework is removed from the downloads. We suggest converting iBATIS framework DAOs to the Spring Framework.
    2、下載后將lib文件夾下的三個jar文件加入機器的Classpath中
    此時,iBATIS 的框架已經搭建好

    下面介紹一下如何訪問MsSqlServer。
    1、機器已經下載了Jdbc for MSsqlServer的jar文件,共三個文件,微軟網站有下載。
    2、可以通過Eclipse自帶的DataBase Explorer測試是否能訪問MsSqlServer

    此時,通過iBATIS訪問MsSqlServer的前期條件均已經準備好,下面進行配置
    1、配置sql-map-config.xml文件,核心部分如下
    <sqlMapConfig>

    ? <properties resource="com/zyque/struts/database.properties"/>

    ? <transactionManager type="JDBC">
    ??? <dataSource type="SIMPLE">
    ????? <property value="${driver}" name="JDBC.Driver"/>
    ????? <property value="${url}" name="JDBC.ConnectionURL"/>
    ????? <property value="${username}" name="JDBC.Username"/>
    ????? <property value="${password}" name="JDBC.Password"/>
    ????? <property name="JDBC.DefaultAutoCommit" value="true" />
    ??? </dataSource>
    ? </transactionManager>

    ? <sqlMap resource="com/zyque/ibatis/BhbGl.xml"/>
    ?
    </sqlMapConfig>

    2、從上可以看出數據庫讀取的是database.properties,此配置如下
    driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
    url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor
    username=sa
    password=sa
    此處注意的是在訪問MsSqlServer時候,需將SelectMethod=cursor,原因見上篇博客

    通過這兩步就可以通過ibatis訪問MsSqlServer了
    訪問示例代碼(參考的ibatis的入門指南,ibatis官方網站有下載),此處未對代碼進行功能隔離封裝,便于向嬖人之流的初學者學習
    Bhbm elm = null;
    String p_mc = "FM_BHJLDW";

    String resource = "com/zyque/ibatis/sql-map-config.xml";
    ?Reader reader = Resources.getResourceAsReader(resource);
    sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);


    elm = (Bhbm) sqlMap.queryForObject ("getBhbByName", p_mc);

    上面演示的一個簡單查詢,其余的示例可以看入門指南。并非本文的重點。

    ?????

    posted @ 2007-01-11 21:01 滌生 閱讀(987) | 評論 (1)編輯 收藏
    僅列出標題  下一頁
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(5)

    隨筆檔案

    UML

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费黄色福利视频| 国产乱子精品免费视观看片| 免费国产污网站在线观看| 免费精品99久久国产综合精品| 美丽姑娘免费观看在线观看中文版| 99久久国产热无码精品免费| 午夜寂寞在线一级观看免费| 亚洲人AV永久一区二区三区久久 | 国产白丝无码免费视频| 国产精品永久免费10000| 又大又粗又爽a级毛片免费看| 国产亚洲成归v人片在线观看| 久久久无码精品亚洲日韩京东传媒 | 又色又污又黄无遮挡的免费视| 亚洲精品国产精品乱码在线观看 | 亚洲欧洲日韩不卡| 亚洲香蕉在线观看| 一区二区免费国产在线观看| 鲁大师在线影院免费观看| 免费看AV毛片一区二区三区| 亚洲一区精品无码| 国产日本亚洲一区二区三区| sss日本免费完整版在线观看| 69免费视频大片| 亚洲成a人无码av波多野按摩 | 亚洲精品国产情侣av在线| 亚洲a∨无码精品色午夜| 你是我的城池营垒免费看| 免费国产黄线在线观看| 亚洲欧洲自拍拍偷午夜色无码| 亚洲黄色激情视频| a级毛片高清免费视频就| 精品国产麻豆免费网站| 亚洲一区二区在线视频| 免费无码又爽又黄又刺激网站| 免费观看美女用震蛋喷水的视频| 亚洲美女在线国产| 亚洲字幕AV一区二区三区四区| 免费人成激情视频在线观看冫 | 日韩免费高清视频| 久久亚洲私人国产精品|