日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开发指南专题七:JEECG微云快速开发平台查询HQL过滤器

發(fā)布時間:2025/3/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发指南专题七:JEECG微云快速开发平台查询HQL过滤器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


開發(fā)指南專題七:JEECG微云快速開發(fā)平臺 HQL過濾器


1.?查詢HQL過濾器


1.1.?數(shù)據(jù)過濾現(xiàn)狀分析

項目開發(fā)的查詢頁面都會有很多查詢條件,開發(fā)追加查詢條件的工作繁瑣又很浪費時間。

這塊工作量主要在:頁面加查詢字段和后臺代碼邏輯判斷,追加查詢條件;

目前JAVA持久層主流框架Hibernate和Ibatis實現(xiàn)方式分析:

[1].Hibatente?技術實現(xiàn):

A.頁面追加查詢字段;?

B.后臺代碼需加邏輯判斷,判斷字段是否為空,手工拼SQL追加查詢條件;

[2].IBATIS?技術實現(xiàn):

A.頁面追加查詢字段;??

B.后臺不需寫代碼,但是需在XML文件中追加該字段非空判斷和查詢條件;

特點:常規(guī)功能的頁面查詢方式只能是"全匹配"和"模糊查詢",對于特殊的?"包含查詢"和"不匹配查詢",??只能寫特殊邏輯代碼

1.2.??查詢條件SQL生成器

1.2.1.?實現(xiàn)原理

根據(jù)頁面?zhèn)鬟f到后臺的參數(shù),動態(tài)判斷字段是否為空,自動拼SQL追加查詢條件。

實現(xiàn)的功能:實現(xiàn)了"模糊查詢"?,?"包含查詢"?,?"不匹配查詢"?等SQL匹配功能。

特點:頁面僅僅追加一個查詢字段,后臺不需要寫任何代碼,查詢功能自動實現(xiàn)。

1.2.2.?查詢規(guī)則

要求:頁面查詢字段,需跟后臺Action(或Controller)中Page的字段對應一致,后臺不需寫代碼自動生成HQL,追加查詢條件;默認生成的查詢條件是全匹配;

?查詢匹配方式分類:

[1].全匹配查詢:查詢數(shù)據(jù)沒有特殊格式,默認為全匹配查詢

[2].模糊查詢:查詢數(shù)據(jù)格式需加星號[*]?????例如:{MD*/*MD*/*M*D*}

[3].包含查詢:查詢數(shù)據(jù)格式采用逗號分隔[,]??例如:?{01,03}(含義:in('01','03'))

[4].不匹配查詢:查詢數(shù)據(jù)格式需要加嘆號前綴[!]?例如:{!123}(含義:不等于123)

特殊說明:查詢不為Null的方法=!null(大小寫沒關系);查詢不為空字符串的方法=!(只有一個嘆號).

[5].時間范圍范圍查詢

jsp?頁面中使用的name:需要查詢的日期類型字段名本身(什么都不加),表示查詢時查詢等于該字段時間的數(shù)據(jù)

begin:需要查詢的日期類型字段名(首字母大寫),表示查詢開始時間?查詢時查詢大于等于開始時間的數(shù)據(jù)

end:?需要查詢的日期類型字段名(首字母大寫),表示查詢結束時間查詢時查詢小于等于結束時間的數(shù)據(jù)?

使用舉例:

字段名稱?private?Date?birthday

查詢開始時間?beginBirthday

查詢結束時間?endBirthday

1.2.3.?具體實現(xiàn)

第一步:頁面實現(xiàn)

說明:為dategrid字段,追加屬性?query="true",自動加載出查詢框,如圖51所示。


第二步:controller層處理

Controller中對應的處理邏輯如圖52所示。

1.3查詢過濾器高級特性

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


當然,可以通過dategrid和dgCol的參數(shù)設置來達到更高級的查詢過濾功能,如組合查詢條件和值范圍查詢。1.3.1.?組合條件查詢

設置<t:dategrid>標簽的queryMode=”group”(該參數(shù)值默認為”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接收傳遞到后臺的查詢條件,或者直接在方法參數(shù)列表里填上,springmvc會幫我們獲得。

然后將得到的范圍查詢條件添加到CriteriaQuery對象中,最后調用CriteriaQuery的add()方法加載生成hql。

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

1.3.3.?查詢字段添加日期控件

例如,要給創(chuàng)建日期的范圍查詢條件框添加日期控件,首先為創(chuàng)建日期添加范圍查詢:

<t:dgCol?title="創(chuàng)建日期"?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.?日期字段的數(shù)據(jù)格式化

在dategrid中,對于日期字段,可以通過設置<d:dgCol>的formatter屬性配置格式化方式,實現(xiàn)對日期數(shù)據(jù)的格式化,如:

<t:dgCol?title="創(chuàng)建日期"?field="createTime"?formatter="yyyy-MM-dd?hh:mm:ss"

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

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

1.3.5.?數(shù)據(jù)列表合計功能

進行數(shù)據(jù)的列表展示時,為數(shù)據(jù)顯示合計數(shù)是一個很有用的功能,在jeecg?的datagrid中實現(xiàn)該功能的效果如圖58所示。


該功能的實現(xiàn),主要是通過在加載datagrid的數(shù)據(jù)時,統(tǒng)計出所需的合計值,并放在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 *?說明:格式為?字段名:(可選,不寫該值時為分頁數(shù)據(jù)的合計)?多個合計??,?分割

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:字段名[:值],其中值為選填項,填了則使用給定的值,沒填則自動統(tǒng)計分頁合計,示例:

salary:35.00,age,email:合計

這里將salary的合計值通過查詢數(shù)據(jù)庫得出,而age則通過當前分頁數(shù)據(jù)自動合計,email給定一個值“合計”,其作用是在datagrid對應于email列的下方顯示一個說明信息。








?


?


總結

以上是生活随笔為你收集整理的开发指南专题七:JEECG微云快速开发平台查询HQL过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。