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


原文地址:https://www.cnblogs.com/niceyoo/p/10519574.html

时间: 2024-07-30 14:05:27

jeecg自定义datagrid查询的相关文章

jeecg自定义CriteriaQuery查询组装

@RequestMapping(params = "datagrid") public void datagrid(TbTendUserEntity tbTendUser, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { CriteriaQuery cq = new CriteriaQuery(TbTendUserEntity.class, dataGrid); // 查询条件

JEECG中datagrid方法自定义查询条件

自定义加添加查询条件的用法: CriteriaQuery cq = new CriteriaQuery(EquipmentEntity.class, dataGrid); //查询条件组装器 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, equipment, request.getParameterMap()); cq.add(Restrictions.or(Restrictions.in("per

自定义菜单查询接口

使用接口创建自定义菜单后,开发者还可使用接口查询自定义菜单的结构.另外请注意,在设置了个性化菜单后,使用本自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息. 请求说明 http请求方式:GET https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN 返回说明(无个性化菜单时) 对应创建接口,正确的Json返回结果: {     "menu": {         "button"

atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php

atitit.  集合groupby 的实现(2)---自定义linq查询--java .net php 实现方式有如下 1. Linq的实现原理流程(ati总结) 1 2. groupby  与 事先排序 2 3. #----------聚合函数 2 4. 自定义linq查询Linq .from(li) .groupBy("url","user" ) .select("url", count().as("countx"), 

easyui Datagrid查询报错Uncaught TypeError:Cannot read property &#39;length&#39; of undefined

1.问题描述 easyui中datagrid执行loadData方法出现如下异常:Cannot read property 'length' of undefined 2.一开始怀疑是js或者页面的问题,然后从早上干到下午,网上各种方法用尽了就是不行! 最后发现规律了: 使用mybatis从数据库查询返回的List不报错,但是自己new的ArrayList总是报错! 后来发现原来mybatis返回的不是ArrayList!而是PageList! 3.解决问题 PageList中有个参数Pagin

golang自定义数据类型查询与插入postgresql中point数据

golang自定义数据类型查询与插入postgresql中point数据 具体代码如下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自定义支持类型 type Point s

kettle中使用javascript步骤和fireToDB函数实现自定义数据库查询

kettle中使用javascript步骤和fireToDB函数实现自定义数据库查询 假设你需要实现非传统的数据库查询操作,为了讨论这种情景,我们假设你需要读取数据库中的正则表达式,然后检查输入的每行的字段匹配表达式的个数. 在javascript步骤执行数据库查询 在javascript步骤初始化的时候,查询数据库,获取正则表达式记录集.然后每一行的输入数据循环检查是否匹配表达式,如果匹配,记录变量加一,最后把结果写到到前行的新增字段中.思路很清楚,但是如何在javascript步骤实现数据库

自定义条件查询测试

1 //自定义条件查询测试 2 @Test 3 public void testFindAllByExample() { 4 //分页参数 5 int page = 0;//从0开始 6 int size = 10; 7 /* 8 //分页参数 9 if (page <= 0) { 10 page = 1; 11 } 12 if (size <= 0) { 13 size = 10; 14 } 15 //构造分页查询方法 16 page = page - 1; 17 */ 18 Pageabl

jeecg 扩展封装查询条件 时间段查询

使用jeecg框架开发的小伙伴们知道,添加查询条件,通常是我们加一个配置(query="true")就可以将该字段设置为查询条件.简单方便.但是这样的配置查询条件仅适用于输入框输入查询和下拉框查询(如果你配置的该字段使用了replace).显然,这样的查询条件根本满足不了我们的需求,最常见的就是时间段查询,以及时间段与其他字段混合查询的情况,下面简单说一下解决方法. 自定义查询条件, 第一步:将字段中所有配置的query="true",改为query="f