zoukankan      html  css  js  c++  java
  • 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
    如果觉得文章对你有所帮助,右下方点个推荐~

  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/Jeely/p/12613596.html
Copyright © 2011-2022 走看看