JpetStore的單元測試代碼與它的系統(tǒng)源文件是獨立分離的,在test文件夾中。打開文件夾可以很清楚的發(fā)現(xiàn)該文件夾的內(nèi)容組成結(jié)構(gòu)與源文件基本一致。
JpetStore分為領(lǐng)域?qū)樱╠omain),持久層(peristence),服務(wù)層(service),表現(xiàn)層(presentation),它的測試也分這幾個層來進(jìn)行。 閱讀全文
在看JPetStore的代碼時,發(fā)現(xiàn)它的分頁處理主要是通過返回PaginatedList對象來完成的。如:在CatalogService類中
public PaginatedList getProductListByCategory(String categoryId) {
return productDao.getProductListByCategory(categoryId);
}
分頁是操作數(shù)據(jù)庫型系統(tǒng)常遇到的問題。分頁實現(xiàn)方法很多,但效率的差異就很大了。iBatis是通過什么方式來實現(xiàn)這個分頁的了。查看它的實現(xiàn)部分: 閱讀全文
此文為網(wǎng)絡(luò)文章引用,原文鏈接為 http://seagar.javaeye.com/blog/post/189580
類與類關(guān)系的UML圖與代碼表現(xiàn)
類與類之間的關(guān)系對于理解面向?qū)ο缶哂泻苤匾淖饔茫郧霸诿嬖嚨臅r候也經(jīng)常被問到這個問題,在這里我就介紹一下。
UML圖與應(yīng)用代碼例子:
2.依賴(Dependency) [依賴] 對于兩個相對獨立的對象,當(dāng)一個對象負(fù)責(zé)構(gòu)造另一個對象的實例,或者依賴另一個對象的服務(wù)時,這兩個對象之間主要體現(xiàn)為依賴關(guān)系。 [具體表現(xiàn)] 依賴關(guān)系表現(xiàn)在局部變量,方法的參數(shù),以及對靜態(tài)方法的調(diào)用 [現(xiàn)實例子] 比如說你要去擰螺絲,你是不是要借助(也就是依賴)螺絲刀(Screwdriver)來幫助你完成擰螺絲(screw)的工作 [UML表現(xiàn)](圖1.2)
3.關(guān)聯(lián)(Association) [關(guān)聯(lián)] 對于兩個相對獨立的對象,當(dāng)一個對象的實例與另一個對象的一些特定實例存在固定的對應(yīng)關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系。 [具體表現(xiàn)] 關(guān)聯(lián)關(guān)系是使用實例變量來實現(xiàn) [現(xiàn)實例子] 比如客戶和訂單,每個訂單對應(yīng)特定的客戶,每個客戶對應(yīng)一些特定的訂單;再例如公司和員工,每個公司對應(yīng)一些特定的員工,每個員工對應(yīng)一特定的公司 [UML圖] (圖1.3) ![]() 圖1.3 公司和員工的關(guān)聯(lián)關(guān)系 [代碼表現(xiàn)]
[聚合] 當(dāng)對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚集關(guān)系。聚合是關(guān)聯(lián)關(guān)系的一種,是較強的關(guān)聯(lián)關(guān)系,強調(diào)的是整體與部分之間的關(guān)系。 [具體表現(xiàn)] 與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實例變量來實現(xiàn)這樣關(guān)系的。關(guān)聯(lián)關(guān)系和聚合關(guān)系來語法上是沒辦法區(qū)分的,從語義上才能更好的區(qū)分兩者的區(qū)別。 [關(guān)聯(lián)與聚合的區(qū)別] (1)關(guān)聯(lián)關(guān)系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關(guān)聯(lián)關(guān)系,而不是聚合關(guān)系,因為人不是由自行車組成的。 聚合關(guān)系涉及的兩個對象處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主板以及內(nèi)存就是聚集關(guān)系,因為主板是電腦的組成部分。 (2)對于具有聚集關(guān)系(尤其是強聚集關(guān)系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當(dāng)整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內(nèi)存)拆了下來。 [UML圖](圖1.4) ![]() 圖1.3 電腦和組件的聚合關(guān)系 [代碼表現(xiàn)]
|
iBatis DAO入門與進(jìn)階(http://www.matrix.org.cn/resource/article/44/44058_iBatis+DAO.html)
iBatis DAO事務(wù)探索(http://www.aygfsteel.com/RongHao/archive/2006/01/20/28817.html)
今天繼續(xù)研究了JPetStore的持久層,其中由于看了一篇文章的誤導(dǎo),導(dǎo)致我對其中的事務(wù)處理深表懷疑。通過閱讀源代碼與看上面兩篇文章,對這個問題才認(rèn)識清楚。和我當(dāng)初預(yù)想的一致。
閱讀全文 摘要: 問題就出現(xiàn)在這,Item類中包含了Product類,出現(xiàn)NestedSqlException錯誤。
查閱了ibatis幫助,此處sql_map的嵌套類寫法是正確的。我又將這個sql語句拷貝到MsSqlServer中執(zhí)行,結(jié)果也是正確的。陷入困惑。
閱讀全文
我是從Net陣營中剛轉(zhuǎn)入Java里的,在Net中對請求參數(shù)的名稱無特殊限制,只要在頁面中取參數(shù)的值即可。當(dāng)然這個功能在Java中也具備。即request.Getparameter()
今天我在看JpetStore代碼時,在點擊
http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?categoryId=BIRDS
時,當(dāng)跟蹤函數(shù)viewCategory時發(fā)現(xiàn)此時categoryID已經(jīng)賦值了,我卻找不到在什么地方賦值的,好是花費了一番周執(zhí)。
查看此段鏈接對應(yīng)的struts.xml





http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?category=BIRDS
此時出現(xiàn)錯誤,錯誤如下:



















1)調(diào)用processActionForm( )方法檢查是否存在為ActionMapping配置的ActionForm 。如果存在,則在有效區(qū)
域內(nèi)查找是否存在該ActionForm 的實例,存在,則復(fù)用,不存在,則創(chuàng)建一個實例。然后將實例保存與再配置
文件中配置好的有效區(qū)域(request,session,application)內(nèi),并用Action元素的name屬性作為該實例的關(guān)鍵字。
2)調(diào)用processPopulate( )方法,如果存來存在為ActionMapping配置的ActionForm,則封裝請求對象中的數(shù)據(jù)
到ActionForm 中,在進(jìn)行封裝之前,先調(diào)用ActionForm 的reset( )方法進(jìn)行屬性值的默認(rèn)化。
根據(jù)以上的分析,可得知,在調(diào)用鏈接前struts框架會自動的將所有的請求參數(shù)封裝入指定的formbean中。所以請求參數(shù)的名稱應(yīng)該是對應(yīng)formbean的一個屬性。
這就是struts中請求參數(shù)的處理過程。主要是我對struts還沒有完全掌握,加上Net的影響,才花費了一圈發(fā)現(xiàn)這個原因。
JpetStore中的Action與普通Struts的Action處理方式不一樣。遍歷JpetStore的src文件夾,并無一個具體的Action,那么它是如何來完成普通Struts的Action工作了?
查看JpetStore的Struts.xml可以發(fā)現(xiàn),它的Action只有一個,即“org.apache.stuts.beanaction.Beanaction”。通過Eclipse查看beanaction.jar的源代碼,可以發(fā)現(xiàn)Beanaction繼承與普通Action,即具備普通的action的功能。那么它無具體Action的奧妙在哪,繼續(xù)研究BeanAction的代碼,截取BeanAction的excute方法中核心部分代碼如下:?






























































通過研究上面這段代碼,我們可知,JpetStore中沒有具體Action實現(xiàn)的關(guān)鍵原因即在于下面這幾句

























以上是整個beanaction的實現(xiàn)機制。個人感覺此種實現(xiàn)方法對于開發(fā)者而言已經(jīng)類似于ASP.NET的.aspx與.cs開發(fā)模式了。下面是通過實例來說明一下BeanAction如何控制formbean的
?
Struts-config.xml的配置里有3種映射方式,來告訴BeanAction把控制轉(zhuǎn)到哪個form bean對象的哪個方法來處理。
(1)parameter=”*’直接跳轉(zhuǎn);(2)Parameter中含具體的方法名;(3)Path中最后一個/后的方法名
以這個請求連接為例http://localhost/jpetstore4/shop/viewOrder.shtml
1. URL Pattern
??? |






?
此種方式表示,控制將被轉(zhuǎn)發(fā)到"orderBean"這個form bean對象 的"viewOrder"方法(行為)來處理。方法名取"path"參數(shù)的以"/"分隔的最后一部分。
2. Method Parameter?






?
此種方式表示,控制將被轉(zhuǎn)發(fā)到"orderBean"這個form bean對象的"viewOrder"方法(行為)來處理。配置中的"parameter"參數(shù)表示form bean類上的方法。"parameter"參數(shù)優(yōu)先于"path"參數(shù)。
3. No Method call






此種方式表示,form bean上沒有任何方法被調(diào)用。如果存在"name"屬性,則struts把表單參數(shù)等數(shù)據(jù)填充到form bean對象后,把控制轉(zhuǎn)發(fā)到"success"。否則,如果name為空,則直接轉(zhuǎn)發(fā)控制到"success"。
這就相當(dāng)于struts內(nèi)置的org.apache.struts.actions.ForwardAction的功能
![]() ![]() ![]() ![]() ![]() |
?
獲得
????? http://ibatis.apache.org/abator.html
???? Eclipse可以自動的進(jìn)行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:
- Take the "Help>Software Updates>Find and Install" Menu Option
- Select the "Search for new features to install" radio button, press "Next"
- Press the "New Remote Site" button
- Enter the following information:
- Name:
- Abator for Eclipse Update Site
- URL:
- http://ibatis.apache.org/tools/abator
- Press OK
- Check the box next to "Abator for Eclipse Update Site"
- Follow the remainder of the install wizard
2、安裝好后將在New菜單中看到一個新的文件類型Abator for iBATIS Configuration File,此是Abator的配置文件,配置文件的詳細(xì)說明見http://ibatis.apache.org/docs/tools/abator/
3、新建一個配置文件,進(jìn)行修改,根據(jù)自己的實際需求進(jìn)行修改
關(guān)鍵點:
1)jdbcconnection,按照一般的配置即可,需要說明的是它需要指定訪問JdbcDriver的classPathEntry,對于MsSqlServer而言,要將這三個jar文件均包含在內(nèi),否則會出現(xiàn)jdbc訪問錯誤。
2)配置三個Pakage
3)配置表,此處需說明的是對于MsSqlServer不能寫TableSchema,我初次指定TableSchema,結(jié)果未找到對應(yīng)的表
簡單的配置如下,復(fù)雜的見配置文件的詳細(xì)說明。示例配置文件如下
<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,生成文件。
?
學(xué)習(xí)的最好方法莫過于研究示例程序。本文是鄙人今日在Eclipse中運行iBATIS的JpetStore的記錄,供同仁參考1、下載iBAITS(http://ibatis.apache.org/javadownloads.cgi)
2、下載JPetStore-5.0(http://ibatis.apache.org/javadownloads.cgi)
準(zhǔn)備工作完成,下面開始將示例程序轉(zhuǎn)移到Eclipse中
1、在Eclipse中新建一個空的WebProject,如:JPetStore
2、將下載的JPetStore-5.0文件夾的內(nèi)容拷貝至JPetStore,其中由于Eclipse默認(rèn)的Web文件夾是WebRoot所以JPetStore-5.0中的Web文件單獨拷貝到新建的Project的Web文件夾WebRoot下。簡單的是說,就是要保證空的WebProject中的所擁有文件模型不動,將下載的內(nèi)容拷貝到相應(yīng)的文件夾下
3、刷新Eclipse,此時會看到src下顯示為錯誤,錯誤的原因是此時對應(yīng)的包未引入,由于Eclipse默認(rèn)的是WebRoot/lib下的包文件,所以將主目錄下即JPetStore/devlib與JPetStore/lib引入到項目中
有兩種方法:直接將此兩個文件夾下的內(nèi)容直接拷貝到JPetStore/WebRoot/lib下,或者,通過Import命令引入
4、至此就已經(jīng)完成項目遷移工作,下面就是
1)建數(shù)據(jù)庫,鄙人用的是MsSqlServer,在JPetStore/src/ddl中有各種數(shù)據(jù)庫的sql文件
2)修改iBATIS的database.propertis,見上篇拙作
3)在Eclipse通過Tomcat部署
即可看到PetShop的網(wǎng)站了
http://127.0.0.1:8083/JPetStore
希望對和我一樣的初學(xué)者有所幫助
希望此文能對初次使用ibatis訪問MsSqlserver的朋友起個借鑒
1、在http://ibatis.apache.org/javadownloads.cgi下載ibatis,我下載的是2.2.0,由于還沒有看Spring,所以下載此版本,帶 iBATIS DAO 框架。以后版本都不再含有此框架。見網(wǎng)站說明:
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 的框架已經(jīng)搭建好
下面介紹一下如何訪問MsSqlServer。
1、機器已經(jīng)下載了Jdbc for MSsqlServer的jar文件,共三個文件,微軟網(wǎng)站有下載。
2、可以通過Eclipse自帶的DataBase Explorer測試是否能訪問MsSqlServer
此時,通過iBATIS訪問MsSqlServer的前期條件均已經(jīng)準(zhǔn)備好,下面進(jìn)行配置
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、從上可以看出數(shù)據(jù)庫讀取的是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官方網(wǎng)站有下載),此處未對代碼進(jìn)行功能隔離封裝,便于向嬖人之流的初學(xué)者學(xué)習(xí)
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);
上面演示的一個簡單查詢,其余的示例可以看入門指南。并非本文的重點。
?????
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
常用鏈接
留言簿(5)
隨筆檔案
UML
- 類與類關(guān)系的UML圖與代碼表現(xiàn)
- 描述的簡單、清楚
搜索
最新評論

- 1.?re: ibatis JshopStore5的sqlmap的xml錯誤,NestedSQLException錯誤
-
@junmy
你走得路,先人已經(jīng)走過N多次了.
你再走來,不覺得可恥嗎? - --LingShame
- 2.?re: ibatis JshopStore5的sqlmap的xml錯誤,NestedSQLException錯誤
- 好內(nèi)容,以前研究過,不過好久了, 最近寫了幾句,也發(fā)現(xiàn)了這個問題
- --ossoftwaare
- 3.?re: 如何在Eclipse中運行ibatis的JpetStore
- 寫的不錯,看了作者的描述,已經(jīng)把問題解決了,謝謝。
- --dashen
- 4.?re: 如何在Eclipse中運行ibatis訪問MsSqlServer
- 好,正需要,回去試試先.謝謝了
- --一個人
- 5.?re: 如何在Eclipse中使用ibatis的自動代碼生成工具Abator
- iBatis大全~
- --墻頭草