1. 程式人生 > >開發指南專題七 JEECG微雲快速開發平臺查詢HQL過濾器

開發指南專題七 JEECG微雲快速開發平臺查詢HQL過濾器

dategrid中的查詢過濾器預設是單條件查詢,即在設定多個dgCol的query=”true”之後,查詢條件中同時只能有一個條件被使用,生成的頁面效果如圖53所示。

當然,可以通過dategrid和dgCol的引數設定來達到更高階的查詢過濾功能,如組合查詢條件和值範圍查詢。1.3.1. 組合條件查詢

設定<t:dategrid>標籤的queryMode=”group”(該引數值預設為”single”,即單條件查詢),在頁面生成時,會生成一個組合查詢條件輸入面板。生成的頁面效果如圖54所示。

1.3.2. 欄位範圍查詢

設定<t:dgCol>標籤的queryMode=”group”,在頁面生成時,會生成一個範圍輸入框。生成的頁面效果如圖54所示。

55欄位範圍查詢效果

欄位範圍查詢會為該欄位生成兩個輸入框,name分別為“欄位名_begin”和“欄位名_end”,具體的查詢功能需要在後臺接收這兩個輸入框的內容,並把查詢條件加入到HQL中。示例如下:

@RequestMapping(params = "datagrid")  

public void datagrid(JeecgDemo jeecgDemo,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {  

CriteriaQuery cq = new CriteriaQuery(JeecgDemo.class, dataGrid);  

   //查詢條件組裝器

   org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jeecgDemo);  

   String ctBegin = request.getParameter("createTime_begin");  

   String ctEnd = request.getParameter("createTime_end");  

   if(ctBegin!=null && ctEnd!=null){  

   try {  

   cq.ge("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctBegin));  

   cq.le("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctEnd));  

} catch (ParseException e) {  

e.printStackTrace();  

}  

cq.add();  

   }  

this.jeecgDemoService.getDataGridReturn(cq, true);  

TagUtil.datagrid(response, dataGrid);  

}

在控制器中用request接收傳遞到後臺的查詢條件,或者直接在方法引數列表裡填上,springmvc會幫我們獲得。

然後將得到的範圍查詢條件新增到CriteriaQuery物件中,最後呼叫CriteriaQuery的add()方法載入生成hql。

至此,範圍查詢就完成了。

1.3.3. 查詢欄位新增日期控制元件

例如,要給建立日期的範圍查詢條件框新增日期控制元件,首先為建立日期新增範圍查詢:

<t:dgCol title="建立日期" field="createTime" formatter="yyyy-MM-dd hh:mm:ss" query="true" queryMode="group"></t:dgCol>

用jquery為生成的createTime_start和createTime_end兩個輸入框新增日期控制元件。

$(document).ready(function(){  

$("input[name='createTime_begin']").attr("class","easyui-datebox");  

$("input[name='createTime_end']").attr("class","easyui-datebox");  

);

最終的效果如圖56所示。

1.3.4. 日期欄位的資料格式化

在dategrid中,對於日期欄位,可以通過設定<d:dgCol>的formatter屬性配置格式化方式,實現對日期資料的格式化,如:

<t:dgCol title="建立日期" field="createTime" formatter="yyyy-MM-dd hh:mm:ss"

 query="true" queryMode="group"></t:dgCol>

對於日期的格式化方式,可以參考JDK參考手冊中SimpleDateFormat中對於日期和時間模式的說明,如圖57所示。

1.3.5. 資料列表合計功能

進行資料的列表展示時,為資料顯示合計數是一個很有用的功能,在jeecg 的datagrid中實現該功能的效果如圖58所示。

該功能的實現,主要是通過在載入datagrid的資料時,統計出所需的合計值,並放在datagrid物件的footer中。示例程式碼如下:

1 @RequestMapping(params = "datagrid")  

2 publicvoid datagrid(JeecgDemo jeecgDemo,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {  

3         CriteriaQuery cq = new CriteriaQuery(JeecgDemo.class, dataGrid);  

4 //查詢條件組裝器

5         org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jeecgDemo);  

6         String ctBegin = request.getParameter("createTime_begin");  

7         String ctEnd = request.getParameter("createTime_end");  

8 if(StringUtil.isNotEmpty(ctBegin)&& StringUtil.isNotEmpty(ctEnd)){  

9 try {  

10                 cq.ge("createTime"new SimpleDateFormat("yyyy-MM-dd").parse(ctBegin));  

11                 cq.le("createTime"new SimpleDateFormat("yyyy-MM-dd").parse(ctEnd));  

12             } catch (ParseException e) {  

13                 e.printStackTrace();  

14             }  

15             cq.add();  

16         }  

17 this.jeecgDemoService.getDataGridReturn(cq, true);  

18 //update-begin--Author:zhaojunfu  Date:20130520 forTASK #109 datagrid標籤沒有封裝合計功能

19         String total_salary = String.valueOf(jeecgDemoService.findOneForJdbc("select sum(salary) as ssum from jeecg_demo").get("ssum"));  

20 /*

21 說明:格式為欄位名:(可選,不寫該值時為分頁資料的合計多個合計分割

22          */

23  dataGrid.setFooter("salary:"+total_salary+",age,email:合計");

24 //update-end--Author:zhaojunfu  Date:20130520 forTASK #109 datagrid標籤沒有封裝合計功能

25         TagUtil.datagrid(response, dataGrid);  

26     }  

在該示例程式碼中,需要重點注意的是這裡的第23行:

dataGrid.setFooter("salary:"+total_salary+",age,email:合計"); 

setFooter()方法接收一個字串,其格式為s:欄位名[:值],其中值為選填項,填了則使用給定的值,沒填則自動統計分頁合計,示例:

salary:35.00,age,email:合計

這裡將salary的合計值通過查詢資料庫得出,而age則通過當前分頁資料自動合計,email給定一個值“合計”,其作用是在datagrid對應於email列的下方顯示一個說明資訊。