为什么要写这篇文章?
我们了解,使用 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
如果觉得文章对你有所帮助,右下方点个推荐~
原文地址:https://www.cnblogs.com/niceyoo/p/10519574.html
时间: 2024-07-30 14:05:27