为什么要写这篇文章?

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

18年专科毕业后,期间一度迷茫,最近我创建了一个公众号用来记录自己的成长。

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

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

    自定义加添加查询条件的用法: CriteriaQuery cq = new CriteriaQuery(EquipmentEntity.class, dataGrid); //查询条件组装器 org. ...

  2. jeecg中列表查询数据关联其他表的显示

    1.A表字段:id,name;B表字段:id,name,fid(A表外键),现查询A表和B表的所有数据并且查询条件A,B都有,在前台页面list显示 2.后台方法: @RequestMapping(p ...

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

    atitit.  集合groupby 的实现(2)---自定义linq查询--java .net php 实现方式有如下 1. Linq的实现原理流程(ati总结) 1 2. groupby  与 事 ...

  4. Hibernate自定义字段查询

    关于Hibernate自定义字段查询的方法,网上有很多,我这里就不详细写了,只把几个查询方法的注意事项说明一下. 废话少说, 进入正题: 假设有2个实体对象,Institution和User,结构与配 ...

  5. 演练:使用属性自定义 DataGrid 控件

    演练:使用属性自定义 DataGrid 控件 Silverlight   此主题尚未评级 - 评价此主题   Silverlight DataGrid 控件支持常用表格式设置选项,例如交替显示不同的行 ...

  6. Spring Security教程(二):自定义数据库查询

    Spring Security教程(二):自定义数据库查询   Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就 ...

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

    使用jeecg框架开发的小伙伴们知道,添加查询条件,通常是我们加一个配置(query="true")就可以将该字段设置为查询条件.简单方便.但是这样的配置查询条件仅适用于输入框输入 ...

  8. jeecg的cq查询方式

    @RequestMapping(params = "datagrid")    public void datagrid(TbStudentDepEntity tbStudentD ...

  9. JEECG实现模糊查询

    1.JEECG默认不带模糊查询的,但实际开发中会经常用到模糊查询,因此要适当修改(在相应的查询处). @RequestMapping(params = "datagrid") pu ...

随机推荐

  1. 解决Eclipse启动时报Initializing Java Tooling异常信息

    1.启动Eclipse报错:An internal error occurred during: "Initializing Java Tooling".java.lang.Nul ...

  2. ES6新语法

    ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...

  3. jquery 第一章

    1.本章目标    了解jquery    了解jquery和js的区别    掌握jquery的入门    掌握jquery对象和dom对象的区别2.jquery简介    jquery是一个轻量级 ...

  4. 微信小程序picker组件 - 省市二级联动

    picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. picker官方文档链接 由于项目需 ...

  5. post 数据

    可参照:http://www.voidcn.com/blog/Vindra/article/p-4917667.html 一.get请求 curl "http://www.baidu.com ...

  6. vue-video-player集成videojs-contrib-hls实现.m3u8文件播放

    // 安装依赖 npm install vue-video-player --save npm install videojs-contrib-hls --save // 在main.js中全局引入 ...

  7. Centos6的yum源

    更换原因: yum -y install fping 1.阿里云Linux安装软件镜像源 常用的源: 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云 ...

  8. LCA最近公共祖先

    不会 准备研究一波!!! #include<bits/stdc++.h> ; using namespace std; vector<int> g[maxn]; ][maxn] ...

  9. 新世界主机_XenServer7.0都有哪些优势?

    新世界主机VPS全部都采用了Xen硬件虚拟化技术,每个用户都能够独享资源,一键就可以创建和重装VPS,每个VPS都拥有足够的带宽,保证顺畅运行(http://m.0830mn.com). 新世界主机使 ...

  10. linux(CentOS)磁盘挂载数据盘

    linux(CentOS)磁盘挂载数据盘:第一步:查看是否存在需要挂载的磁盘: sudo fdisk -l 第二步:为需要挂载的磁盘创建分区: sudo fdisk /dev/vdb 执行中:依次选择 ...