上一節(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.crea
? ??? ??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_studen
?????? String control2 = “score_studen
??????
?????? String value1 = “
?????? String value2 = “
?????? LazyValidatorActionForm lazyForm = new LazyValidatorForm();
?????? lazyForm.set(control1, value1);
?????? lazyForm.set(control2,value2);
?????? // 如果頁面提交后,你可以這樣獲取
?????? Map map = lazyForm. getMap();
??????
?????? // 然后你就可以對這個 map 進行處理,這要看你的處理邏輯嘍!
??????
????????????????????????????????????????????????????????????????????????????
作者: