• 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<StringObject>> 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
    如果觉得文章对你有所帮助,右下方点个推荐~

    18年专科毕业后,期间一度迷茫,最近我创建了一个公众号用来记录自己的成长。
  • 相关阅读:
    路径不对 导致FileNotFoundError: [WinError 2] 系统找不到指定的文件, 问题解决办法
    pycharm + selenium + python 提示 Unresolved reference 'webdriver' 解决办法
    highstock实现股票分时
    jquery 源码剖析1
    html 其它标签
    html5 基本内容 摘自W3C
    html总结
    web性能 部分
    linux常用命令 3
    linux常用命令 2
  • 原文地址:https://www.cnblogs.com/niceyoo/p/10519574.html
Copyright © 2020-2023  润新知