jeecg自定義datagrid查詢


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
如果覺得文章對你有所幫助,右下方點個推薦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM