时光如水

我心跳动
posts - 6, comments - 10, trackbacks - 0, articles - 4
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ValueList原理说明

Posted on 2006-05-16 16:15 qiqijava 阅读(2036) 评论(5)  编辑  收藏 所属分类: Tag

                            ValueList中四个主要的接口与实现类

1. ValueListInfo 封装Map对象,含有排序、分页、聚焦和提交表单等相关信息
2. ValueListHandler接口,实现类:DefaultValueListHandlerImpl 它是ValueList中的核心类,其定义在配置文件中,调用getValueList方法返回ValueList对象
3. ValueList接口,实现类:DefaultListBackedValueList 它包含两个对象,1)域对象的结果集,2)ValueListInfo对象
4. ValueListAdapter接口,有以下几种实现
 ○ DefaultWrapperAdapter         jdbc操作的适配器
 ○ EventLogAdapter               日志操作的适配器
 ○ FileSystemAdapter             文件系统操作的适配器
 ○ HibernateAdapter              hibernate操作的适配器
 ○ MappingSqlQueryAdapter        iBATIS的sqlMap适配器
 
具体实现流程

第一步:从请求中构造ValueListInfo对象,由帮助类ValueListRequestUtil实现
 从请求中取得URL的参数和系统默认值来构造ValueListInfo对象
 
第二步:得到Adapter的实现类
 调用getBean方法,从配置文件中取得ValueListHandler实现类,调用getValueList方法,得到实体key对应的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>
第三步:构造ValueList对象,使用DefaultListBackedValueList实现类
 用适配器取得结果集(如HibernateAdapter),封装ValueList对象
 ValueList中包含两个对象,1)域对象的结果集,2)ValueListInfo对象(分页的相关息)
 
第四步:把ValueList对象放到WEB的作用域中

HQL说明:主要通过迭代动态生成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的每个变量都要单独占一行,就算是类似between and 的语句也要分两行写


评论

# re: ValueList原理说明  回复  更多评论   

2006-08-24 08:54 by kite
写的不错,能不能详细点!~我是新手,看的不大懂!

# re: ValueList原理说明  回复  更多评论   

2006-12-30 11:19 by qiqijava[匿名]
老兄,我觉得挺细了,再细就只能说废话了,呵呵@kite

# re: ValueList原理说明[未登录]  回复  更多评论   

2008-02-27 09:59 by TANG
很好!!
3Q

# re: ValueList原理说明[未登录]  回复  更多评论   

2008-06-22 17:35 by Joe
哥们,请教一下怎么设置 ValueList的多个字段排序呢? 谢谢

# re: ValueList原理说明  回复  更多评论   

2008-10-07 11:51 by 学习
哥们啊,可不可以写个实例出来啊,麻烦了

只有注册用户登录后才能发表评论。


网站导航: