关于sqlserver分页排序问题,附上前后台代码,以及实现思路。

最近写的一个项目需要分页查询功能,虽然在spring+springmvc+mybatis中利用pagehelper可以轻松解决,但是在我们这个框架中,比较古老,所以只能手写。下面我将代码以及实现思路给大家写一下。如有不足,请批评指正。
首先图片展示。是在这里插入图片描述

 /**
	 * 公司要闻
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/getmediafocus")
	public ModelAndView getmediafocus(@RequestParam(value="pageNum") int pageNum,@RequestParam(value="THEMATIC_CLASS_NUMBER") String THEMATIC_CLASS_NUMBER,@RequestParam(value="THEMATIC_CLASS_NAME") String THEMATIC_CLASS_NAME) throws Exception {
		//传入的参数中,使用@RequestParam注解,获取到url中对应参数的值。
		ModelAndView mv = this.getModelAndView();
		Page page = new Page();
		PageData pd2 = new PageData();
		pd2.put("pageNum", pageNum);//将传递的页码放入容器
		pd2.put("THEMATIC_CLASS_NUMBER", THEMATIC_CLASS_NUMBER);//将传递的类别放入容器
		Page page2=new Page();
		page2.setPd(pd2);
		PageData pd= new PageData();
		pd.put("THEMATIC_CLASS_NUMBER",THEMATIC_CLASS_NUMBER);
		List<PageData>	varList = MediafocusManager.listAll(pd);//listAll是查询表中所有的数据,并不分页。		
		List<PageData> prList=MediafocusManager.findBylistPage(page2);//findBylistPage则是进行分页的sql查询
		int totalPage=varList.size();//获取到集合的长度,便是表中的总记录数 
		int pageList=(int) Math.ceil((double)totalPage / 15);//以总记录数/每页的条数,就是总页码。
		int endPage=pageList;//总页码的值就是,最后一页。
		int begin=0;					//前台循环页码开始的值。pageList是前台循环结束的值。
		if(pageList<5){				//如果总页码小与五页。那么pageList就是总页码。
			pageList=pageList;
		}else{
			begin=pageNum-2;		//如果大于五,则对开始和结束的只进行运算,-2,+2 是显示5个页码,-4,+5是显示10个页码,其他自己推算。
			pageList=pageNum+2;
		}
		
		if(begin<1 && pageList>5){		//这里的判断,则是为了去除上begin有负数,pageList大于5的结果。如果每页要显示10个页码,那么pageList>10, pageList赋值为10;
			begin=1;
			pageList=5;
		}
		if(begin<1 && pageList<5){		//此处也是对begin为负数,pageList小于5时进行赋值。若想显示10条页码看上逻辑即可。
			begin=1;
			pageList=pageList;
		}
		if(pageNum==endPage && endPage>=5){		//此处则是判断传入的页码是否等于最后一页。对begin和pageList赋值。若想显示10条页码看上逻辑即可。
		pageList=pageNum;    						            
			begin=pageList-4;
		}
		if(pageNum<=3 && endPage>=5){			//此处判断传入页码为3或小于3是对begin和pageList赋值。
			begin=1;
			pageList=5;
		}
		//将页码计算的结果以及查询的列表传入前台。
		mv.addObject("endPage",endPage);
		mv.addObject("totalPage",totalPage);
		mv.addObject("begin",begin);
		mv.addObject("pageNum",pageNum);
		mv.addObject("pageList",pageList);
		mv.addObject("THEMATIC_CLASS_NAME",THEMATIC_CLASS_NAME);
		mv.addObject("THEMATIC_CLASS_NUMBER",THEMATIC_CLASS_NUMBER);
		mv.addObject("varList",prList);
		mv.setViewName("menhu/mediafocus");
		return mv;
	}

上面是后台代码的逻辑编写。
下面请看mapper文件中,sql语句的编写。
这就是sqlserver的分页语句查询。
注意的是,想要实现排序功能的话,需要写到子查询中。当时困扰我很久的时间倒叙。ORDER BY一直写不对位置。
传递的页码,以及参数请看位置。

SELECT TOP 15 MEDIAFOCUS_TITLE,MEDIAFOCUS_ID,MEDIAFOCUS_CREATTIME 
		FROM 
			( 
			SELECT ROW_NUMBER() OVER (ORDER BY MEDIAFOCUS_CREATTIME DESC ) AS RowNumber,* FROM OA_MEDIAFOCUS 
			where MEDIAFOCUS_STATUS = #{pd.THEMATIC_CLASS_NUMBER} 
			) 
			A 
			WHERE RowNumber > 15*(${pd.pageNum} - 1) 

上面是mapper文件sql的编写,下面请看前台页码的循环遍历结果。
a标签带的样式和图片,请大家注意href写法,以及<c:forEach >中的代码。
其次就是前后翻页的问题。

<a href="fuwu/getmediafocus.do?pageNum=1&THEMATIC_CLASS_NUMBER=${THEMATIC_CLASS_NUMBER }&THEMATIC_CLASS_NAME=${THEMATIC_CLASS_NAME}"  style="color:#0081cc;" rel="external"></a>//第一页
<a style="text-decoration:none;" id="bid" href="">//上一页

<c:forEach begin="${begin }" end="${pageList}" varStatus="index">
 <a href="fuwu/getmediafocus.do?pageNum=${index.index}&THEMATIC_CLASS_NUMBER=${THEMATIC_CLASS_NUMBER }&THEMATIC_CLASS_NAME=${THEMATIC_CLASS_NAME}" style="color:#0081cc;" rel="external"><b ><span id="currentPage" value="${pageNum}" <c:if  test="${pageNum == index.index }">style="color:red"</c:if>>${index.index}</span></b></a>
</c:forEach>

<a style="text-decoration:none;" id="aid"  href=""></a>//下一页

<a href="fuwu/getmediafocus.do?pageNum=${endPage}&THEMATIC_CLASS_NUMBER=${THEMATIC_CLASS_NUMBER }&THEMATIC_CLASS_NAME=${THEMATIC_CLASS_NAME}"  style="color:#0081cc;" rel="external"></a>//最后一页

为 前后翻页的标签 写上id 前翻页是id=“bid”,后翻页是"aid"
在script中给a标签href属性赋值。

<script>
		var page=$("#currentPage").attr("value");//当前页有一个id,获取到当前页的值。
		
		if(Number(page)==${pageList}){					//Numer()是对字符串转为数字使用。逻辑判断我就不说了。
			document.getElementById("aid").href = "javascript:void(0);";
			
		}else{
			document.getElementById("aid").href = "fuwu/getmediafocus.do?THEMATIC_CLASS_NUMBER=${THEMATIC_CLASS_NUMBER }&THEMATIC_CLASS_NAME=${THEMATIC_CLASS_NAME}&pageNum="+(Number(page)+1);
		}
		if(Number(page)>1){
			document.getElementById("bid").href = "fuwu/getmediafocus.do?THEMATIC_CLASS_NUMBER=${THEMATIC_CLASS_NUMBER }&THEMATIC_CLASS_NAME=${THEMATIC_CLASS_NAME}&pageNum="+(Number(page)-1);
		}else{
			document.getElementById("bid").href = "javascript:void(0);";
		} 		
</script>

以上就是sqlserver中手写分页的一点心得。
如果有大佬看过后任务代码还有优化,还请指教。
一起学习,共同进步呀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章