【前言】
关于真分页和假分页这个知识是从敲牛腩新闻发布系统的时候,但是一直是迷迷糊糊的,只是大致的了解,今天就来总结一下。
【分页简介】
当我们显示足够大的数据量时,所有数据都显示在一页上,会造成很多麻烦,本着人性化的角度,我们采用分页显示的处理办法,分页主要分为真分页和假分页。
(假分页)
在运行查询的时候,就把全部的数据都查询出来,之后再跳转页面的时候就不需要进行查询了。
(1)优点:仅仅查询一次数据库,减少了与后台的交互。
(2)缺点:当数据量足够多时查询速度比较慢,用户体验度降低。
(真分页)
在运行查询操作的时候,仅仅查询所显示当前页面的内容进行显示,之后的跳转页面也都需要查询数据库取相应的数据。例如百度就采用的真分页。
(1)优点:查询速度快,用户体验度高。
(2)缺点:页面跳转速度较假分页慢。
下面就介绍一下用的比较多的真分页。
【代码】
(前台代码)
dataType: 'json',
width: "100%", //宽度
striped: true, //把行条纹化(奇偶行背景色不同)
loadMsg: '正在加载信息.......', //从远程站点加载数据是,显示的提示消息
pagination: true, //数据网格底部显示分页工具栏
singleSelect: true, //只允许选中一行
pageList: [10, 20, 30, 40, 50], //设置每页记录条数的列表
pageSize: 10, //初始化页面尺寸(默认分页大小)
pageNumber: 1, //初始化页面(默认显示第一页)
beforePageText: '第', //页数文本框前显示的汉字
afterPageText: '页 共 {pages} 页',
displayMsg: '第{from}到{to}条,共{total}条',
columns: [[ //每页具体内容
{ field: 'Serial', title: '序号', width: "5%", align: 'center', editor: 'text', hidden: true },
{ field: 'ItemNo', title: '商品编号', width: "9%", align: 'center', hidden: true },
{ field: 'UserName', title: '借用人', width: "10%", align: 'center', editor: 'text' },
{ field: 'ReturnDate', title: '归还日期', width: "10%", align: 'center', editor: 'text', formatter: changeDateFormat },
{ field: 'StorageName', title: '仓库名称', width: "10%", align: 'center' },
{ field: 'operatorColumn', title: '操作列', width: "11%", align: 'center', editor: 'text', formatter: editDelete1 },
]]
(controler代码)
//获得表格条数和当前页数
int pageCount = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);
int pageSize = Request["page"] == null ? 1 : int.Parse(Request["page"]);
//初始化总条数为0
int total = 0;
List<V_Approval> list = iexaminebll.approval(op, pageCount, pageSize, out total);
return Json(new { rows = list, total });
(D层代码)
public List<V_Approval> approval(string op, int pageCount, int pageSize, out int total)
{
//设置分页开始记录和结果记录
int begin = (pageSize - 1) * pageCount;
string sql="";
//真分页要显示的数据
string sqldt = sql + " limit " + begin + "," + pageCount;
//查询出所有的数据
string sqlCount = sql;
DataTable dt = MySQLHelper.ExecuteDataTable(sqldt);
DataTable dtCount = MySQLHelper.ExecuteDataTable(sqlCount);
List<V_Approval> listCount = DatatableToList.ConvertToList<V_Approval>(dtCount);
total = listCount.Count;
return DatatableToList.ConvertToList<V_Approval>(dt);
D层要执行2次操作,分别是查询出来所有的数据显示,还有就是显示本页查询的记录。
【感受】
以前都是迷迷糊糊的,现在再问我这个问题我也能说出个一二三来了,原理懂了其他的就好说了。
【总结】
真分页是只从数据库拿到当前页的记录;假分页是从数据库拿到所有记录只显示当前页的。(ps这是豪哥说的,很对哦)以后别人再问关于真假分页的区别就很简单了。