Posted on 2006-05-16 16:15
qiqijava 閱讀(2056)
評(píng)論(5) 編輯 收藏 所屬分類:
Tag
??????????????????????????? ValueList中四個(gè)主要的接口與實(shí)現(xiàn)類
1. ValueListInfo 封裝Map對(duì)象,含有排序、分頁(yè)、聚焦和提交表單等相關(guān)信息
2. ValueListHandler接口,實(shí)現(xiàn)類:DefaultValueListHandlerImpl 它是ValueList中的核心類,其定義在配置文件中,調(diào)用getValueList方法返回ValueList對(duì)象
3. ValueList接口,實(shí)現(xiàn)類:DefaultListBackedValueList 它包含兩個(gè)對(duì)象,1)域?qū)ο蟮慕Y(jié)果集,2)ValueListInfo對(duì)象
4. ValueListAdapter接口,有以下幾種實(shí)現(xiàn)
?○ DefaultWrapperAdapter???????? jdbc操作的適配器
?○ EventLogAdapter?????????????? 日志操作的適配器
?○ FileSystemAdapter???????????? 文件系統(tǒng)操作的適配器
?○ HibernateAdapter????????????? hibernate操作的適配器
?○ MappingSqlQueryAdapter??????? iBATIS的sqlMap適配器
?
具體實(shí)現(xiàn)流程
第一步:從請(qǐng)求中構(gòu)造ValueListInfo對(duì)象,由幫助類ValueListRequestUtil實(shí)現(xiàn)
?從請(qǐng)求中取得URL的參數(shù)和系統(tǒng)默認(rèn)值來構(gòu)造ValueListInfo對(duì)象
?
第二步:得到Adapter的實(shí)現(xiàn)類
?調(diào)用getBean方法,從配置文件中取得ValueListHandler實(shí)現(xiàn)類,調(diào)用getValueList方法,得到實(shí)體key對(duì)應(yīng)的Adapter,如:
?<bean class="net.mlw.vlh.adapter.hibernate3.HibernateAdapter">
??<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
??<property name="defaultNumberPerPage"><value>10</value></property>
??<property name="defaultSortColumn"><value>messageIn.date</value></property>
??<property name="defaultSortDirection"><value>desc</value></property>
??<property name="hql">
??<value>
??from User AS vo
???/~certNumber: where vo.certNumber like {certNumber} ~/
???/~name: where vo.name like {name} ~/
???/~certHolder: where vo.certHolder like {certHolder} ~/
???/~groupName: where vo.group.name like {groupName} ~/
???/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/
??</value>
??</property>
??<property name="defaultFocusPropertyObjectAlias"><value>vo</value></property>
??<property name="maxRowsForFocus"><value>160000</value></property>??
??<property name="removeEmptyStrings"><value>true</value></property>
?</bean>
第三步:構(gòu)造ValueList對(duì)象,使用DefaultListBackedValueList實(shí)現(xiàn)類
?用適配器取得結(jié)果集(如HibernateAdapter),封裝ValueList對(duì)象
?ValueList中包含兩個(gè)對(duì)象,1)域?qū)ο蟮慕Y(jié)果集,2)ValueListInfo對(duì)象(分頁(yè)的相關(guān)息)
?
第四步:把ValueList對(duì)象放到WEB的作用域中
HQL說明:主要通過迭代動(dòng)態(tài)生成HQL語句
from User AS vo
?/~certNumber: where vo.certNumber like {certNumber} ~/?????????? (1)
?/~name: where vo.name like {name} ~/???????????????????????????? (2)
?/~certHolder: where vo.certHolder like {certHolder} ~/?????????? (3)
?/~groupName: where vo.group.name like {groupName} ~/???????????? (4)
?/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/???????? (5)
(1)如果ValueListInfo中包含certNumber變量,如certNumber=100,則vo.certNumber like=100,生成HQL=from User AS vo where vo.certNumber like=100;
??????? 如果ValueListInfo中不包含certNumber變量,生成HQL=from User AS vo?? (1)行由空白代替
其它以此類推
注意:傳給HQL的每個(gè)變量都要單獨(dú)占一行,就算是類似between and 的語句也要分兩行寫