jeecg自定義datagrid查詢
為什么要寫這篇文章?
我們了解,使用 jeecg 提供的 CriteriaQuery 查詢方式,確實能滿足絕大數的需求,但是往往有那么個比較復雜的情況,需要我們直接去寫 sql,比如多表查詢呀等等等等~
因此,就整理了 "自定義 datagrid 查詢" 這篇文章,希望這篇文章對你有所幫助。
后台datagrid方法
在此就不詳細描述業務需求了,假裝巴拉巴拉巴拉一堆復雜業務描述,最終用一個十分簡單的
sql 給表示了:
SELECT t.* FROM `t_s_user` t;
看一下代碼部分:
@RequestMapping(params = "datagrid")
public void datagrid(MyyWorkOrderEntity myyWorkOrder,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(MyyWorkOrderEntity.class, dataGrid);
//查詢條件組裝器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, myyWorkOrder, request.getParameterMap());
try{
String sql1=" SELECT t.* FROM t_s_user t ";
String sql2=" SELECT count(t.*) FROM t_s_user t ";
// 某一個時間條件的案例
String mwo_reporting_time_begin1 = request.getParameter("mwo_reporting_time_begin1");
String mwo_reporting_time_end2 = request.getParameter("mwo_reporting_time_end2");
if (StringUtil.isNotEmpty(mwo_reporting_time_begin1)) {
sql1+=" and mwo_reporting_time>'"+request.getParameter("mwo_reporting_time_begin1")+"'";
sql2+=" and mwo_reporting_time>'"+request.getParameter("mwo_reporting_time_begin1")+"'";
}
if (StringUtil.isNotEmpty(mwo_reporting_time_end2)) {
sql1+=" and mwo_reporting_time<'"+request.getParameter("mwo_reporting_time_end2")+"'";
sql2+=" and mwo_reporting_time<'"+request.getParameter("mwo_reporting_time_end2")+"'";
}
...
sql1+=" GROUP BY a.`id` order by mwo_reporting_time desc";
sql2+=" GROUP BY a.`id` ) b";
// 獲取總數,用於分頁使用
long countMwo = systemService.getCountForJdbc(sql2);
// 轉換為 int 整形
int allCounts = (int)countMwo;
int pageSize = cq.getPageSize();// 每頁顯示數
int curPageNO = PagerUtil.getcurPageNo(allCounts, cq.getCurPage(),pageSize);// 當前頁
//findForJdbc(sql1); sql
//findHql(hql1); hql
// 獲取數據列表,參數一:查詢的sql、參數二三:當前頁碼、數據總數
List<Map<String, Object>> listMwo=systemService.findForJdbc(sql1, curPageNO, pageSize);
cq.getDataGrid().setResults(listMwo);
cq.getDataGrid().setTotal(allCounts);
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
TagUtil.datagrid(response, dataGrid);
}
該方法,主要實現 sql 部分的拼裝,從而實現數據 List<Map<String,Object>>
的獲取,注意,這個地方可是要牽扯到分頁的!這也是為什么要同時寫兩個 sql ~
前台jsp界面
需要注意的是,界面中 t:dgCol 中的 filed 不同以往,該處需要使用數據庫表字段,畢竟上邊獲取的 List<Map<String,Object>>
中沒有實體屬性嘛。
部分參考:
<t:dgCol title="更新人id" field="update_by"></t:dgCol>
<t:dgCol title="更新人姓名" field="update_name"></t:dgCol>
<t:dgCol title="更新日期" field="update_date" formatter="yyyy-MM-dd"></t:dgCol>
<t:dgCol title="創建人id" field="create_by"></t:dgCol>
<t:dgCol title="創建人姓名" field="create_name" queryMode="group"></t:dgCol>
最后
關於文中 "后台 datagrid 方法" 中的代碼並沒有進行詳細的講解,其實代碼部分還是比較簡單的,兩個 sql ,一個用於求總數,一個用於實現條件查詢,復雜部分主要在於業務 sql 的書寫。
文章作者:niceyoo
文章地址:https://www.cnblogs.com/niceyoo/p/10519574.html
如果覺得文章對你有所幫助,右下方點個推薦~