首先看html代码:
宿舍信息
表记编码
上次读数
本次读数
实际用量
月补用量
缴费状态
抄表日期
手动/自动
//初始化所有用户数据
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, //关闭排序
"bServerSide": true, //打开服务器模式,这个是最重要的
"bLengthChange": false, //关闭每页显示多少条数据
"fnServerData": retrieveData, //自定义数据获取函数
"aoColumns": [{
"mDataProp": "name"
}, {
"mDataProp": "meterNo"
}, {
"mDataProp": "startedNum"
}, {
"mDataProp": "endedNum"
}, {
"mDataProp": "amount"
}, {
"mDataProp": "limitAmount"
}, {
"mDataProp": "state"
}, {
"mDataProp": "readingDate"
}, {
"mDataProp": "dataType"
}]
});
//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;
}
虽然到这里解决了大数据量,但是这个大数据量也是有上限的,现在我的数据库里有170万条数据,比起我以前一次性加载那效率是提高了很多,但是问题还是有点点,毕竟数据量还是比较大的,点下一页的响应时间大概在3秒左右(局域网),如果直接点末页再点首页,这个时间又会长点。
总的来说 如果数据超过了1000 但是有没有上万 ,那么这个解决办法已经够用了,现在要做的就是对百万级,千万级数据的优化,如果有朋友也是在犯愁,希望我们一起交流交流
原文地址:http://smotive.iteye.com/blog/1689485