最近寫的一個項目需要分頁查詢功能,雖然在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中手寫分頁的一點心得。
如果有大佬看過後任務代碼還有優化,還請指教。
一起學習,共同進步呀。