更多datatables在http://dt.thxopen.com/ 欢迎大家来做客
在项目中用到datatables比较多,但是当datatables加载超过1000多的时候就会出现有点缓慢的的样子,这个时候如果继续增加数据量让datatables去处理,那会是一个让人抓狂的事情,幸好datatables也提供了大数据量的解决办法,下面我结合我的项目,来讲讲怎么用datatables加载大数据量问题。
首先看html代码:
- <table id="meterDataExp" width="100%" class="display">
- <thead>
- <tr>
- <th>
- 宿舍信息
- </th>
- <th>
- 表记编码
- </th>
- <th>
- 上次读数
- </th>
- <th>
- 本次读数
- </th>
- <th>
- 实际用量
- </th>
- <th>
- 月补用量
- </th>
- <th>
- 缴费状态
- </th>
- <th>
- 抄表日期
- </th>
- <th>
- 手动/自动
- </th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
js代码:
- //初始化所有用户数据
- oTable =$('#meterDataExp').dataTable({
- "bProcessing": true, //显示是否加载
- "sScrollX":"100%",
- "bJQueryUI": true,
- "sScrollY": 230,
- "bDestroy":true,
- "iDisplayLength":10,
- //"aaSorting": [[ 2, "desc" ]],//给列表排序 ,第一个参数表示数组 。4 就是css grade那列。第二个参数为 desc或是asc
- "sScrollXInner": "100%",
- "sPaginationType": "full_numbers",
- "sAjaxSource":"getAllMeterDataInfo.action",
- "bSort": false, //关闭排序
- <font color="#ff0000"> "bServerSide":true,//打开服务器模式,这个是最重要的</font>
- "bLengthChange":false, //关闭每页显示多少条数据
- "fnServerData":retrieveData,//自定义数据获取函数
- "aoColumns": [
- { "mDataProp": "name"},
- { "mDataProp": "meterNo"},
- { "mDataProp": "startedNum"},
- { "mDataProp": "endedNum" },
- { "mDataProp": "amount"},
- { "mDataProp": "limitAmount"},
- { "mDataProp": "state"},
- { "mDataProp": "readingDate"},
- { "mDataProp": "dataType"}
- ]
- });
struts配置:
- <action name="getAllMeterDataInfo"
- class="com.daja.paymp.presentation.action.meter.MeterDataAction" method="findAllMeterData">
- <result name="success" type="json"></result>
- </action>
action代码:首先要定义这么几个参数,因为你开启了datatables的服务器模式,你对datatables的每个操作,他都会想服务器发送一个请求
- //datatables服务器分页
- private String sEcho ; //包含表格的一些信息,需要不变的传回去
- private String iDisplayStart ; //当你点击下一页或者页数的时候会传到后台的值
- private String iDisplayLength ; //默认是传10
- private String returnMessage ; //这个是我定义的一个json 字符串 传回给datatables用来显示
- private String sSearch ; //这个是datatables表头上的搜索框传来的值
- public String findAllMeterData() throws Exception {
- //从后台获取该表总共有多少条记录
- String iTotalRecords = meterPageService.getResultNum("PT0000","").toString();
- //
- String iTotalDisplayRecords = "0";
- //定义一个json格式的数据
- JSONObject Alltempobj =JSONObject.fromObject("{}");
- JSONObject tempobj = JSONObject.fromObject("{}");
- JSONArray tempArray = JSONArray.fromObject("[]");
- meterDataList = new ArrayList<MeterData>();
- meterDataDtoList = new ArrayList<MeterDataDTO>();
- //从前台接受搜索框里的值
- if(sSearch != null && !sSearch.trim().equals("")){
- iTotalDisplayRecords =meterPageService.getResultNum("PT0000",sSearch).toString();
- meterDataList = meterPageService.selectMeterDataForPage("PT0000",sSearch, iDisplayStart, iDisplayLength);
- }else{
- iTotalDisplayRecords = iTotalRecords;
- meterDataList = meterPageService.selectMeterDataForPage("PT0000","", iDisplayStart, iDisplayLength);
- }
- Alltempobj.put("aaData",
- meterDataList);
- Alltempobj.put("iTotalRecords",iTotalRecords);
- Alltempobj.put("iTotalDisplayRecords",iTotalDisplayRecords);
- Alltempobj.put("sEcho",sEcho);
- returnMessage = JSONObject.fromObject(Alltempobj).toString();
- return SUCCESS;
- }
service层方法:由于这里是用的mybatis,我直接贴sql语句
- <!-- 根据条件或者条件为空获取过滤的记录数 -->
- <select id="getResultNum" resultType="map" parameterType="string">
- select count(*) as resultNum from payment_log
- where customer_no||meter_no||customer_name||operator like CONCAT(CONCAT('%',#{search}),'%')
- order by accdate desc
- </select>
- <select id="selectMeterDataForPage" parameterType="map" resultType="com.daja.paymp.domain.model.meter.MeterData">
- <![CDATA[
- select tt."positionBuild.name",tt."positionDorm.name",tt.id,tt.meterNo,tt.customerNo,tt.readingDate,tt.startedNum,tt.endedNum,
- tt.consNum,tt.limitNum,tt.state,tt.dataType from
- (SELECT
- PB.NAME as "positionBuild.name",
- PD.NAME as "positionDorm.name",
- T.ID as id,
- T.METER_NO as meterNo,
- T.CUSTOMER_NO as customerNo,
- T.READING_DATE as readingDate,
- T.STARTED_NUM as startedNum,
- T.ENDED_NUM as endedNum,
- T.CONS_NUM as consNum,
- T.LIMIT_NUM as limitNum,
- T.STATE as state,
- ROWNUM as rum,
- (case when T.DATA_TYPE='1' then '自动' when T.DATA_TYPE='2' then '手动' end)as dataType
- FROM METER_DATAT ,METER M,PAYMENT_TYPE P,DORM_METER DM, POSITION_DORM PD,POSITION_BUILD PB
- where T.METER_NO = M.NO
- and M.TYPE = P.ID
- and M.NO = DM.METERID
- and DM.DORMID = PD.ID
- and PD.BUILDID = PB.ID
- and P.CODE=#{code}
- and pd.name||T.METER_NO||T.READING_DATE||(case when T.DATA_TYPE='1' then '自动' when T.DATA_TYPE='2' then '手动' end)like CONCAT(CONCAT('%',#{search}),'%')
- and rownum <= #{end}) tt
- where tt.rum > #{start}
- ]]>
- </select>
虽然到这里解决了大数据量,但是这个大数据量也是有上限的,现在我的数据库里有170万条数据,比起我以前一次性加载那效率是提高了很多,但是问题还是有点点,毕竟数据量还是比较大的,点下一页的响应时间大概在3秒左右(局域网),如果直接点末页再点首页,这个时间又会长点。
总的来说 如果数据超过了1000 但是有没有上万 ,那么这个解决办法已经够用了,现在要做的就是对百万级,千万级数据的优化,如果有朋友也是在犯愁,希望我们一起交流交流
更多datatables在http://bbs.sailit.cn 欢迎大家来做客
相关推荐
在这个“Struts2+Hibernate+Spring后台表格分页”项目中,我们将深入探讨如何整合这三个框架实现数据的动态展示和分页。 1. **Struts2框架**:Struts2作为MVC(模型-视图-控制器)架构的实现,主要负责处理用户的...
datatables+springmvc+bootstrap实现分页,包含数据库 Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。 分页,即时搜索和排序 几乎支持任何数据源:DOM, ...
通过以上知识点的讲解,我们可以看到Spring Boot、MybatisPlus和JQuery DataTables的结合使用,可以高效地实现数据展示、分页和模糊查询功能,是现代企业级Web应用中的常见实践。在实际开发中,还需要根据具体需求...
在本项目中,我们主要探讨的是如何利用Spring4 MVC、Maven、MySQL数据库、MyBatis框架以及前端JSON数据来动态生成表格。这是一个常见的Web应用开发模式,它可以帮助开发者快速构建数据驱动的Web应用程序。 首先,...
SSM+Mybatis+datatables+H-ui后台管理系统是一个典型的Java Web项目,它结合了Spring、Spring MVC、Mybatis和H-ui等多个技术组件,旨在构建一个功能完善的后台管理平台。这个系统非常适合Java初学者用来学习后端分页...
数据分页是Web应用中常见的需求,特别是在处理大量数据时,为了提高用户体验和性能,分页可以帮助用户逐步加载和查看数据,而不是一次性加载所有内容。 实现Struts2.0中的数据分页主要涉及以下几个步骤: 1. **...
1,这个项目是strut2.0 + hibernate3.0 + jquery.datatables+mysql 5.0实现的 hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网...
Struts、Spring、MyBatis、jQuery、DataTables 和 Bootstrap 是六个非常重要的开源技术框架,在Web开发领域中广泛应用。它们各自扮演着不同的角色,共同构建了一个高效、灵活且功能丰富的Web应用程序。 首先,...
在这个DEMO中,Datatables很可能被用来展示SQLite数据库中的数据,并实现动态分页,用户可以在前端对数据进行检索和操作。 Servlet是一种Java技术,用于开发动态Web应用程序。在Java Web应用中,Servlet作为服务器...
当页面加载或Ajax请求返回数据时,dataTables会自动填充表格内容并根据配置实现分页功能。同时,dataTables还提供了事件监听和自定义回调函数,允许开发者在用户与表格交互时执行额外的逻辑,比如在点击某行数据时...
采用jdk1.8 + spring boot2.0.2 +springsecurity4+mysql+ mybatis + redis + layui + json + quartz +datatables。 代码实现我都采用的开源的架构,没有授权问题,因此不管是个人学习,还是公司开发,都可以放心的...
3. **后端处理**:在Struts2的Action类中,我们需要处理来自DataTables的请求,返回JSON数据,包含总记录数、当前页数据等。 4. **扩展功能**:如拖拽列和导出,可能需要额外的JavaScript代码和CSS样式来实现。例如...
在本教程中,我们将深入探讨如何搭建SSH框架,并结合Datatables实现前端分页功能。 **一、SSH框架搭建** 1. **Spring框架** - **核心模块**:提供了依赖注入(DI)和面向切面编程(AOP)的功能,是整个框架的基础...
对于Java初学者来说,这是一个很好的实践项目,可以帮助他们理解如何结合使用SpringBoot、MyBatis、JSP、jQuery和DataTables.js来实现一个功能完备的前端分页搜索系统。通过学习和实践这个教程,开发者可以提升自己...
仿jquery.dataTables的分页(查询+排序),jquery插件式开发简单示例。
总结起来,这个项目结合了SpringMVC的强大后端处理能力,Bootstrap的现代前端设计,以及DataTables的交互性表格功能,实现了高效、灵活的表格展示,满足了服务端分页和模糊查询的需求,为用户提供了便捷的数据操作...
Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格...这篇文章主要介绍了DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等),需要的朋友可以参考下
描述中进一步明确了本文档的知识点范围,主要介绍如何通过jQuery和datatables插件实现数据的增删改查功能,并且特别强调了与页面表格相关的操作技巧。这些技巧可能包括表格初始化设置、事件监听、数据请求的配置和...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)正在做课程设计、期末大作业和毕设项目的学生下载使用,当然也适合小白学习进阶、作为项目初期立项演示等。 3、如果基础还行,也可在...
在本教程中,我们将探讨如何利用Datatables与Ajax结合,动态地从服务器获取并展示数据。 首先,让我们了解基础概念。jQuery是一个轻量级的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。...