上一节:http://www.blogjava.net/zhanglongsr/articles/190616.html
1.1.
ResultSetDynaClass
有些时候,我们会遇到需要一个
JavaBean
来持久化多个数据库表的情况,像上面提到的报表的例子。假如
Ta
、
Tb
、
Tc
三个表分别代表
A
、
B
、
C3
个报表,现在假设,如果要减少开发人员的代码编写,而且表结构有着一定的相似性,那么我们会如何做?就目前来看,最简单的莫过于减少表的持久化工作,可以让一个
JavaBean
来维护多个表的持久化。
我们可以使用
DynaBean
构建动态的数据库领域模型,但现在我们面临的一个问题是我们如何获得有效的数据库表的相关字段来构建这个
DynaBean
?
ResultSetDynaClass
封装了
ResultSet
,它能够帮助我们从一
ResultSet
中取出对应的一组属性。
另外,
ResultSetDynaClass
能根据执行的
sql
结果集自动为用户返回一组
DynaBean
,从而减少用户创建
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
实现了
DynaBean
接口。但是从开发的层次角度考虑,我还是单独把它提出来。
从
API
中可以观察到,
LazyValidatorActionForm
继承于
LazyValidatorForm
,撇开
LazyValidatorActionForm
的
validate()
方法,
LazyValidatorActionForm
并没有提供其他方法,那么
LazyValidatorActionForm
的动态特性完全是从
LazyValidatorForm
继承而来。
我们现在虚拟一个需求环境,假设有一个学生成绩录入页面,课程构成了页面的列,学生的各科成绩构成了页面的行,从而我们知道,页面表达学生成绩的文本框应该是动态生成的,当然表达学生成绩的文本框的名称与学生和课程有关,但现在我们忽略这一点,只是单纯的从页面的
Form
的解析考虑。
页面控件的解析可用代码表示如下:
代码示例:
//
假设通过逻辑处理,得到页面一个学生的一门课程的成绩控件名称
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 阅读(190)
评论(0) 编辑 收藏 所属分类:
common