分页处理
在实习的时候,用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", width:getWidth("tt", 0.07)}, {field:"doConfirm", title:"操作", align:"center", width: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)