posts - 28,  comments - 15,  trackbacks - 0

          上一節(jié):http://www.aygfsteel.com/zhanglongsr/articles/190616.html

          1.1. ResultSetDynaClass

          ?????? 有些時候,我們會遇到需要一個 JavaBean 來持久化多個數(shù)據(jù)庫表的情況,像上面提到的報表的例子。假如 Ta? 、 Tb 、 Tc 三個表分別代表 A 、 B 、 C3 個報表,現(xiàn)在假設(shè),如果要減少開發(fā)人員的代碼編寫,而且表結(jié)構(gòu)有著一定的相似性,那么我們會如何做?就目前來看,最簡單的莫過于減少表的持久化工作,可以讓一個 JavaBean 來維護多個表的持久化。

          ?????? 我們可以使用 DynaBean 構(gòu)建動態(tài)的數(shù)據(jù)庫領(lǐng)域模型,但現(xiàn)在我們面臨的一個問題是我們?nèi)绾潍@得有效的數(shù)據(jù)庫表的相關(guān)字段來構(gòu)建這個 DynaBean ?

          ?????? ResultSetDynaClass 封裝了 ResultSet ,它能夠幫助我們從一 ResultSet 中取出對應(yīng)的一組屬性。

          ?????? 另外, ResultSetDynaClass 能根據(jù)執(zhí)行的 sql 結(jié)果集自動為用戶返回一組 DynaBean ,從而減少用戶創(chuàng)建 DynaBean 的工作量。

          ??????

          示例代碼:

          ?????? ? Connection conn = ...;

          ? ??? ??Statement stmt = conn.createStatement();

          ? ??? ??ResultSet rs = stmt.executeQuery

          ????? ("select account_id, name from customers");

          ? ??? ??Iterator rows = (new ResultSetDynaClass(rs)).iterator();

          ? ??? ??while (rows.hasNext()) {

          ????? DynaBean row = (DynaBean) rows.next();

          ????? System.out.println("Account number is " +

          ?? ??????????????????????row.get("account_id") +

          ???????????????????????? " and name is " + row.get("name"));

          ? ??? ??}

          ? ??? ??rs.close();

          1.2. LazyValidatorActionForm??

          從某種意義上來說, LazyValidatorActionForm 也是一種 DynaBean ,因為 LazyValidatorActionForm 繼承于 LazyValidatorForm , LazyValidatorForm 實現(xiàn)了 DynaBean 接口。但是從開發(fā)的層次角度考慮,我還是單獨把它提出來。

          ?????? API 中可以觀察到, LazyValidatorActionForm 繼承于 LazyValidatorForm ,撇開 LazyValidatorActionForm validate() 方法, LazyValidatorActionForm 并沒有提供其他方法,那么 LazyValidatorActionForm 的動態(tài)特性完全是從 LazyValidatorForm 繼承而來。

          ?????? 我們現(xiàn)在虛擬一個需求環(huán)境,假設(shè)有一個學(xué)生成績錄入頁面,課程構(gòu)成了頁面的列,學(xué)生的各科成績構(gòu)成了頁面的行,從而我們知道,頁面表達學(xué)生成績的文本框應(yīng)該是動態(tài)生成的,當(dāng)然表達學(xué)生成績的文本框的名稱與學(xué)生和課程有關(guān),但現(xiàn)在我們忽略這一點,只是單純的從頁面的 Form 的解析考慮。

          ?????? 頁面控件的解析可用代碼表示如下:

          ?

          ?

          代碼示例:

          ?????? // 假設(shè)通過邏輯處理,得到頁面一個學(xué)生的一門課程的成績控件名稱

          ?????? String control1 = “score_student1_course1”;

          ?????? String control2 = “score_student1_course2”;

          ??????

          ?????? String value1 = “85”;

          ?????? String value2 = “86”;

          ?

          ?????? LazyValidatorActionForm lazyForm = new LazyValidatorForm();

          ?????? lazyForm.set(control1, value1);

          ?????? lazyForm.set(control2,value2);

          ?

          ?????? // 如果頁面提交后,你可以這樣獲取

          ?????? Map map = lazyForm. getMap();

          ??????

          ?????? // 然后你就可以對這個 map 進行處理,這要看你的處理邏輯嘍!

          ?

          ? ?

          ?

          ?????? ???????????????????????????????????????????????????????????????????????????? 作者:張興龍

          posted on 2008-06-17 15:36 zhangxl 閱讀(192) 評論(0)  編輯  收藏 所屬分類: common

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊

          收藏夾(2)

          hibernate

          java基礎(chǔ)

          mysql

          xml

          關(guān)注

          壓力測試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96393
          • 排名 - 601

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仪陇县| 蒙山县| 龙里县| 仁化县| 五河县| 泸水县| 措美县| 宣化县| 扎鲁特旗| 金阳县| 武宣县| 揭阳市| 嵊泗县| 五台县| 大埔县| 东乌珠穆沁旗| 周宁县| 天镇县| 齐河县| 中牟县| 视频| 淮南市| 天柱县| 阳城县| 遂川县| 旬邑县| 三河市| 阿拉善左旗| 新闻| 蚌埠市| 许昌县| 长沙市| 桃园市| 唐海县| 九台市| 迁安市| 靖远县| 安岳县| 荣昌县| 蒙城县| 大洼县|