日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

基于Spring+SpringMVC+MyBatis框架的分页查询

發(fā)布時(shí)間:2025/3/21 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Spring+SpringMVC+MyBatis框架的分页查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前端點(diǎn)擊按鈕>>>controller層接受QueryVo和前端帶過(guò)來(lái)的數(shù)據(jù)>>>調(diào)用service層產(chǎn)生PageModel對(duì)象>>>service層接受到QueryVo,填充起始頁(yè)start,調(diào)用dao層計(jì)算出總記錄數(shù)和第一頁(yè)的數(shù)據(jù)集合,通過(guò)當(dāng)前頁(yè)的頁(yè)數(shù)(QueryVo穿過(guò)來(lái)的)+總記錄數(shù)+一頁(yè)放置幾條信息new一個(gè)PageModel對(duì)象,填充PageModel對(duì)象的集合屬性和url屬性>>>dao層計(jì)算每頁(yè)的數(shù)據(jù)集合+計(jì)算總記錄數(shù)。

dao層計(jì)算出總記錄條數(shù)+當(dāng)前頁(yè)面的數(shù)據(jù)集合>>>傳給service層,service層通過(guò)創(chuàng)建PageModel對(duì)象,填充url和集合屬性后得到完整的PageModel對(duì)象,該對(duì)象包含了集合、url和分類信息>>>傳給controller層,controller層把該對(duì)象保存在域中后跳轉(zhuǎn)到顯示分頁(yè)的jsp>>>該jsp動(dòng)態(tài)包含分頁(yè)頁(yè)面pageFile.jsp

前端點(diǎn)擊按鈕跳轉(zhuǎn)到controller層的getUserByPage這個(gè)控制器中:

${pageContext.request.contextPath}/user/getUserByPage.action

控制器收到請(qǐng)求,并以QueryVo和Model作為控制器的入?yún)?#xff0c;其中QueryVo[num=1,start=0;rows=5],model用于存值到作用域中:

@Controller @RequestMapping("user") public class UserController {@Autowiredprivate UserService userService;//注入service對(duì)象@RequestMapping("getUserByPage")public String getUserByPage(QueryVo vo,Model model) {PageModel pm = userService.getUserByPage(vo);//存到域中的值必須名為page,與pageFile中的EL表達(dá)式對(duì)應(yīng)model.addAttribute("page", pm);return "/admin/user/list.jsp";}

QueryVo類(包含分頁(yè)信息的第一頁(yè)+查詢數(shù)據(jù)庫(kù)集合時(shí)的起始頁(yè)+每頁(yè)放多少條數(shù)據(jù)):

public class QueryVo {private Integer num =1;//點(diǎn)進(jìn)去都是第一頁(yè)private Integer start;//數(shù)據(jù)庫(kù)查詢第幾頁(yè)的信息private Integer rows = 5;//每頁(yè)放5條信息//以下是前端可能帶過(guò)來(lái)的數(shù)據(jù)//private Integer cid;public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public Integer getNum() {return num;}public void setNum(Integer num) {this.num = num;}public Integer getStart() {return start;}public void setStart(Integer start) {this.start = start;}public Integer getRows() {return rows;}public void setRows(Integer rows) {this.rows = rows;}@Overridepublic String toString() {return "QueryVo [num=" + num + ", start=" + start + ", rows=" + rows + ", cid=" + cid + "]";}}

service層用來(lái)產(chǎn)生PageModel對(duì)象:

@Service public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic PageModel getUserByPage(QueryVo vo) {//填充QueryVo中start的值,該值隨著num的變化而變化vo.setStart((vo.getNum()-1)*vo.getRows());//通過(guò)dao層得到總記錄條數(shù)int total = userMapper.getTotal();//通過(guò)dao層得到當(dāng)前頁(yè)的數(shù)據(jù)集合List<User> list = userMapper.getUserByPage(vo);PageModel pm = new PageModel(vo.getNum(), total, 5);pm.setRecords(list);pm.setUrl("user/getUserByPage.action?1=1");return pm;}

PageModel類:存放分頁(yè)的相關(guān)信息,通過(guò)起始頁(yè)+總記錄條數(shù)+每頁(yè)存放數(shù)可以算出分頁(yè)的其他信息。

import java.util.List;/*** 存放分頁(yè)相關(guān)的數(shù)據(jù)**/ public class PageModel {//基本屬性private int currentPageNum;//當(dāng)前頁(yè)數(shù),由用戶指定 *private int offsetNum;//offset后面的變量public int getOffsetNum() {return (currentPageNum-1)*5;}public void setOffsetNum(int offsetNum) {this.offsetNum = offsetNum;}private static int pageSize = 5 ;//每頁(yè)顯示的條數(shù),固定的 *private int totalRecords;//總記錄條數(shù),數(shù)據(jù)庫(kù)查出來(lái)的 *private int totalPageNum;//總頁(yè)數(shù),計(jì)算出來(lái)的 *private int startIndex;//每頁(yè)開始記錄的索引,計(jì)算出來(lái)的 *private int prePageNum;//上一頁(yè) *private int nextPageNum;//下一頁(yè) *private List records;//已經(jīng)分好頁(yè)的結(jié)果集,該list中只有10條記錄//擴(kuò)展屬性//一共每頁(yè)顯示9個(gè)頁(yè)碼按鈕private int startPage;//開始頁(yè)碼private int endPage;//結(jié)束頁(yè)碼//完善屬性private String url;//要想使用我的分頁(yè),必須給我兩個(gè)參數(shù)。一個(gè)是要看哪一頁(yè),另一個(gè)是總記錄條數(shù)public PageModel(int currentPageNum,int totalRecords,int pageSize){this.currentPageNum = currentPageNum;this.totalRecords = totalRecords;this.pageSize=pageSize;// this.prePageNum = currentPageNum-1; // this.nextPageNum = currentPageNum+1;//計(jì)算查詢記錄的開始索引startIndex = (currentPageNum-1)*pageSize;startPage = currentPageNum - 4; //5endPage = currentPageNum + 4; //13//計(jì)算總頁(yè)數(shù)totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);//看看總頁(yè)數(shù)夠不夠9頁(yè)if(totalPageNum>9){//超過(guò)了9頁(yè)if(startPage < 1){startPage = 1;endPage = startPage+8;}if(endPage>totalPageNum){endPage = totalPageNum;startPage = endPage-8;}}else{//不夠9頁(yè)startPage = 1;endPage = totalPageNum;}}//計(jì)算上一頁(yè)是第一頁(yè)public int getPrePageNum() {prePageNum = currentPageNum-1;if(prePageNum<1){prePageNum = 1;}return prePageNum;}//計(jì)算下一頁(yè)是第幾頁(yè)public int getNextPageNum() {nextPageNum = currentPageNum+1;if(nextPageNum>totalPageNum){nextPageNum = totalPageNum;}return nextPageNum;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public int getStartPage() {return startPage;}public void setStartPage(int startPage) {this.startPage = startPage;}public int getEndPage() {return endPage;public void setEndPage(int endPage) {this.endPage = endPage;}public int getCurrentPageNum() {return currentPageNum;}public void setCurrentPageNum(int currentPageNum) {this.currentPageNum = currentPageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalRecords() {return totalRecords;}public void setTotalRecords(int totalRecords) {this.totalRecords = totalRecords;}public int getTotalPageNum() {return totalPageNum;}public void setTotalPageNum(int totalPageNum) {this.totalPageNum = totalPageNum;}public int getStartIndex() {return startIndex;}public void setStartIndex(int startIndex) {this.startIndex = startIndex;}public void setPrePageNum(int prePageNum) {this.prePageNum = prePageNum;}public void setNextPageNum(int nextPageNum) {this.nextPageNum = nextPageNum;}public List getRecords() { return records;}public void setRecords(List records) {this.records = records;}@Overridepublic String toString() {return "PageModel [currentPageNum=" + currentPageNum + ", offsetNum=" + offsetNum + ", totalRecords="+ totalRecords + ", totalPageNum=" + totalPageNum + ", startIndex=" + startIndex + ", prePageNum="+ prePageNum + ", nextPageNum=" + nextPageNum + ", records=" + records + ", startPage=" + startPage+ ", endPage=" + endPage + ", url=" + url + "]";} }

dao層計(jì)算總記錄條數(shù)和當(dāng)前頁(yè)的數(shù)據(jù)集合:

<!-- 計(jì)算總記錄條數(shù) --><select id="getTotal" resultType="int">select count(*) from t_user</select><!-- 通過(guò)當(dāng)前頁(yè)start和每一頁(yè)顯示多少條數(shù)據(jù)row計(jì)算出當(dāng)前頁(yè)的數(shù)據(jù)集合,入?yún)镼ueryVo,結(jié)果集為User對(duì)象的集合 --><select id="getUserByPage" parameterType="QueryVo" resultType="User">select * from t_user limit #{start},#{rows}</select>

分頁(yè)頁(yè)面的代碼模版pageFile.jsp(封裝好了下一頁(yè)、上一頁(yè)、首頁(yè)、末頁(yè)的超鏈接路徑,在service層中給定準(zhǔn)確的url即可):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%--分頁(yè)顯示的開始 --%><div style="text-align:center">共${page.totalPageNum}頁(yè)/第${page.currentPageNum}頁(yè)<!-- /pet/pet/petPage.action?cid=1&num=1 --><a href="${pageContext.request.contextPath}/${page.url}&num=1">首頁(yè)</a><a href="${pageContext.request.contextPath}/${page.url}&num=${page.prePageNum}">上一頁(yè)</a><%--顯示的頁(yè)碼,使用forEach遍歷顯示的頁(yè)面 --%><c:forEach begin="${page.startPage}" end="${page.endPage}" var="pagenum"><a href="${pageContext.request.contextPath}/${page.url}&num=${pagenum}">${pagenum}</a></c:forEach><a href="${pageContext.request.contextPath}/${page.url}&num=${page.nextPageNum}">下一頁(yè)</a><a href="${pageContext.request.contextPath}/${page.url}&num=${page.totalPageNum}">末頁(yè)</a><input type="text" id="pagenum" name="pagenum" size="1"/><input type="button" value="前往" onclick="jump()" /><script type="text/javascript">function jump(){var totalpage = ${page.totalPageNum};var pagenum = document.getElementById("pagenum").value;//判斷輸入的是一個(gè)數(shù)字var reg =/^[1-9][0-9]{0,1}$/;if(!reg.test(pagenum)){//不是一個(gè)有效數(shù)字alert("請(qǐng)輸入符合規(guī)定的數(shù)字");return ;}//判斷輸入的數(shù)字不能大于總頁(yè)數(shù)if(parseInt(pagenum)>parseInt(totalpage)){//超過(guò)了總頁(yè)數(shù)alert("不能大于總頁(yè)數(shù)");return;}//轉(zhuǎn)向分頁(yè)顯示的Servletwindow.location.href="${pageContext.request.contextPath}/${page.url}&num="+pagenum;}</script></div><%--分頁(yè)顯示的結(jié)束--%>

總結(jié)

以上是生活随笔為你收集整理的基于Spring+SpringMVC+MyBatis框架的分页查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。