關於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中手寫分頁的一點心得。
如果有大佬看過後任務代碼還有優化,還請指教。
一起學習,共同進步呀。

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