分页处理

在实习的时候,用easyUI 框架完成了毕业设计的后台开发,其中用到的最主要的一个功能就是分页显示。当时看着姜师傅之前写的代码,我也仿照这他的写完了,但是到底为什么这样写一点也不知道,现在想想那是虎真是不求甚解,怪不得姜师傅总说我“还不知道它是什么呢,就写!;你要动脑啊!...” 等等一系列的提醒,现在想想人家真是没说错,当时的我就是不求甚解。现在正是参加工作了,现在的项目有个功能用到分页处理,再次静下心来看他们的代码,发现也不是很难看懂,不管怎样,这也算是一种成长吧。

      (1) EasyUI项目的分页:

      首先定义Page类,用于前端modle(模型)展现页面的页面总数,行数,

public DisplaytagPage<Position> queryPositionInfo(DisplaytagPage dp,Integer p_id,Integer pages,Integer rows){
		Map<String,Integer>map=new HashMap<String,Integer>();
		if(p_id!=null && p_id!=0){
			map.put("p_id",p_id);
		}
		if(rows!=null &&rows!=0){
			map.put("rows",rows);
		}
		if(pages!=null&&pages!=0){
			map.put("pages",(pages-1)*20);
		}else {
			map.put("beginrows",0);
			map.put("endrows",15);
		}
		List<Position> list=templateDao.queryPositionShow(map);//传给dao层需要展示页面每页的行数(首次展示的页面)
		Integer count=templateDao.queryPositionShowCount(map);//查询所有的数据个数
		dp.setList(list);
		dp.setFullListSize(list.size());
		dp.setTotalPages(count);
		return dp;
	}
在查询数据时:

<span style="white-space:pre">	</span><!--获得页面的每次请求所展现的数据-->
<span style="white-space:pre">	</span><select id="query_position_Displaytag" resultClass="position" parameterClass="java.util.Map">
		SELECT * from  k_position  p
		where 1=1
		<isNotEmpty prepend="AND" property="p_id">
			p.p_id=#p_id#
		</isNotEmpty>
        LIMIT #pages#, #rows#
	</select>
<span style="white-space:pre">	</span><!--获得数据的总数-->
	<select id="query_position_Displaytag_count" resultClass="java.lang.Integer" parameterClass="java.util.Map">
		SELECT count(p_id) from  k_position  p
		where 1=1
		<isNotEmpty prepend="AND" property="p_id">
			p.p_id=#p_id#
		</isNotEmpty>   
	</select>
以上是分页处理的后台获取数据方式,在前台只要传(Integer rows,Integer page

$("#tt").datagrid({
		method:'POST',
		iconCls:'icon-save',
		nowrap: true,
		striped: true,
		border: true,
		url: "${pageContext.request.contextPath}/admin/queryAllPositionInfo",
		rownumbers: true,
		pagination: true,
		singleSelect: true,
		pageList:[5,10,15,20,25],
		pageSize: 20,
		queryParams: para,
        height:500,
		pageNumber: 1,
		columns:[[
				 {field:"p_name", title:"职位名称 ",align:"center", getWidth("tt", 0.07)},
		         {field:"doConfirm", title:"操作", align:"center", getWidth("tt", 0.10),
		        	 formatter:function(val, data, ind) {
		        	    var htmls= '<a href="javascript:showChangePositionPage(' + data.p_id + ');">修改</a>   <a href="javascript:delPositionItem(' + data.p_id + ');">删除</a>';
		             return htmls;
		         }}
		         ]]
		});	

(2)现在项目的分页处理:

<1>同样定义页面展示模板 Page: 

<span style="white-space:pre">	</span>private int pageTotal;		//总页数
	private int pageSize;		//每页多少数据
	private int pageNo;		//当前页
	private int dataTotal;		//总数据条数

<2>前台换给后台:要展示的数据,及请求的页数 (Data data,Page page)

<3>service层处理,怎样显示:

判断传入参数若page为空,则显示初始页面(需要设置初始的起始页)ibatis 中的<![CDATA[ and c1.time <= #{userLog.time_end} ]]> 防止不兼容符号,错误识别。

order by c1.time desc limit #{page.pageSize} offset #{page.pageSize}*(#{page.pageNo}-1)  

limit使用规范(以后要学)
<4>Dao层的Map.xml中,order by c1.time desc limit #{page.pageSize} offset #{page.pageSize}*(#{page.pageNo}-1) 

原文地址:https://www.cnblogs.com/yeemi/p/7470171.html