简介
本例代码与页面功能与"简单查询 1"非常类似,请预先了解"简单查询 1"。本例不一样的是,dorado中提供了HibernateHqlDataProvider处理机制,允许开发人员在不定义DAO的情况下,可以直接利用HQL完成数据查询,在某些场景下可以使开发更为简洁,开发效率也大大提升。
使用说明
定义视图私有DataProvider
使用HibernateHqlDataProvider,需要在视图模型中定义一个私有的DataProvider对象:
<DataProvider name="providerOrders" type="hibernateHql"> <Property name="hql"><![CDATA[from Order where employee.id = 'ACN001']]></Property> </DataProvider>
我们注意到其中的type需要设置为"hibernateHql",这表示这个私有的DataProvider对象是HibernateHqlDataProvider类型的。HibernateHqlDataProvider类型的dataProvider对象提供了hql属性,便于我们在该属性中定义hql代码。
定义查询参数
上面的hql中employee.id的值被设置为一个固定值,如果我们希望使这个值具有动态性,也就是说允许browser中动态设定employee.id的值,并且可以实现ajax类型的查询效果,则我们可以将hql调整为:
<Property name="hql"><![CDATA[from Order where employee.id = :employeeId]]></Property>
这样设定后我们就可以利用DataSet的查询技术实现ajax的效果处理。
HQL动态组装
在很多情况下,我们希望hql具有动态性,也就是说希望其能根据browser端,操作员输入的查询条件来动态组装hql代码. 在HibernateHqlDataProvider技术中采用了Velocity技术,它直接利用了veloctiy的条件判断语法,从而实现hql的动态组装效果。关于veloctiy的条件判断语法请参考velocity的相关文档(http://velocity.apache.org/docbook/DocBook-Framework-1.0.pdf),此处不详细说明,本例的代码也容易理解:
<Property name="hql"><![CDATA[ from Order where 1 = 1 #if ($orderDate1) and orderDate >= :orderDate1 #end #if ($orderDate2) and orderDate <= :orderDate2 #end #if ($customer) and customer.id = :customer.id #end #if ($employee) and employee.id = :employee.id #end ]]></Property>