0


实现分页查询

实现分页查询

一、分页要素与语法

分页要素:
1)页码 (PageIndex):要查询第几页的数据;
2)每页展示最大长度的数据 (PageSize):每页显示多少条数据。

语法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、例:博客系统文章列表页

2.1 原始前端代码

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>博客列表</title><linkrel="stylesheet"href="css/list.css"><linkrel="stylesheet"href="css/blog_list.css"><style>.nav{position: fixed;top: 0;left: 0;right: 0;height: 50px;}.container{padding-top: 80px;height: auto;}.container-right{width: auto;}.blog-pagnation-wrapper{height: 40px;margin: 16px 0;text-align: center;}.blog-pagnation-item{display: inline-block;padding: 8px;border: 1px solid #d0d0d5;color: #333;}.blog-pagnation-item:hover{background: #4e4eeb;color: #fff;}.blog-pagnation-item.actvie{background: #4e4eeb;color: #fff;}</style></head><body><!-- 导航栏 --><divclass="nav"><imgsrc="img/logo2.jpg"alt=""><spanclass="title">我的博客系统</span><!-- 用来占据中间位置 --><spanclass="spacer"></span><ahref="blog_list.html">主页</a><ahref="blog_edit.html">写博客</a><ahref="login.html">登陆</a><!-- <a href="#">注销</a> --></div><!-- 版心 --><divclass="container"><!-- 右侧内容详情 --><divclass="container-right"><!-- 每一篇博客包含标题, 摘要, 时间 --><divclass="blog"><divclass="title">我的第一篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=1"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><divclass="blog"><divclass="title">我的第二篇博客</div><divclass="date">2021-06-02</div><divclass="desc">
                    从今天起, 我要认真敲代码. Lorem ipsum, dolor sit amet consectetur adipisicing elit. Cum distinctio ullam eum ut
                    veroab laborum numquam tenetur est in dolorum a sint, assumenda adipisci similique quaerat vel.
                    Facere,
                    et.
                </div><ahref="blog_content.html?id=2"class="detail">查看全文 &gt;&gt;</a></div><hr><divclass="blog-pagnation-wrapper"><buttonclass="blog-pagnation-item">首页</button><buttonclass="blog-pagnation-item">上一页</button><buttonclass="blog-pagnation-item">下一页</button><buttonclass="blog-pagnation-item">末页</button></div></div></div></body></html>

页面效果:

在这里插入图片描述

2.2 实现:查询分页数据

  1. 引入 jQuery
<!-- 引入 jquery --><scriptsrc="js/jquery.min.js"></script>
  1. 定义 pindex 和 psize
<script>var pindex =1;// 当前的页码 (默认)var psize =2;// 每页显示的条数信息 (默认)</script>
  1. 定义 getURLParam(key) 方法
// 获取当前 URL 中某个参数的方法functiongetURLParam(key){var params = location.search;if(params.indexOf("?")>=0){
        params = params.substring(1);var paramArr = params.split('&');for(var i=0;i<paramArr.length;i++){var namevalues = paramArr[i].split("=");if(namevalues[0]==key){return namevalues[1];}}}else{return'';}}
  1. 初始化参数
// 初始化分页的参数,尝试从 url 中获取 pindex 和 psizefunctioninitPageParam(){var pi =getURLParam("pindex");if(pi!=""){
            pindex=pi;}var pz =getURLParam("psize");if(pz!=""){
            psize=pz;}}initPageParam();
  1. 查询分页数据
// 查询分页数据functiongetList(){
            jQuery.ajax({url:"/art/list",type:"GET",data:{"pindex":pindex,"psize":psize
                },success:function(result){if(result.code==200&& result.data!=null&& result.data.length>0){// 循环拼接数据到 documentvar finalHtml="";for(var i=0;i<result.data.length;i++){var item = result.data[i];
                            finalHtml+='<div class="blog">';
                            finalHtml+='<div class="title">'+item.title+'</div>';
                            finalHtml+='<div class="date">'+item.createtime+'</div>';
                            finalHtml+='<div class="desc">'+item.content+'</div>';
                            finalHtml+='<a href="blog_content.html?id='+item.id+'" class="detail">查看全文</a>';
                            finalHtml+='</div>';}jQuery("#listDiv").html(finalHtml);}}});}getList();
  1. 后端实现
@RequestMapping("/list")publicList<ArticleInfo>getList(Integer pindex,Integer psize){if(pindex ==null|| psize ==null){returnnull;}// 分页公式,计算偏移量int offset =(pindex -1)* psize;return articleService.getList(psize, offset);}
publicList<ArticleInfo>getList(Integer psize,Integer offset){return articleMapper.getList(psize,offset);}
publicList<ArticleInfo>getList(@Param("psize")Integer psize,@Param("offset")Integer offset);
<selectid="getList"resultType="com.example.demo.model.ArticleInfo">
        select * from articleinfo limit #{psize} offset #{offset}
    </select>

注意: offset 一定要在 controller 中进行计算然后传递;不要传递 pindex 留到 sql 中计算 (会报错)!

验证

通过 http://localhost:8080/blog_list.html 访问:

在这里插入图片描述

成功获取到了目前数据库中前两个文章信息。

此时分页效果使用的是设置的默认参数:

var pindex = 1

var psize = 2;

通过 URL 传参改变:http://localhost:8080/blog_list.html?pindex=2&psize=3

在这里插入图片描述

查询到了第 4、5、6 条数据。

2.3 实现 “首页” “上一页” “下一页” “末页”

前端代码添加

<!-- 版心 --><divclass="container"><!-- 右侧内容详情 --><divclass="container-right"style="width: 100%;"><divid="listDiv"></div><hr><divclass="blog-pagnation-wrapper"><buttonclass="blog-pagnation-item"onclick="firstClick()">首页</button><buttonclass="blog-pagnation-item"onclick="beforeClick()">上一页</button><buttonclass="blog-pagnation-item"onclick="nextClick()">下一页</button><buttonclass="blog-pagnation-item"onclick="lastClick()">末页</button></div></div></div>

得到总页数

  1. 添加全局变量 totalpage:
<script>var pindex =1;// 当前的页码 (默认)var psize =2;// 每页显示的条数信息 (默认)var totalpage =1;// 总共多少页</script>
  1. 初始化 pindex 和 psize 参数后,通过 getTotalPage() 方法初始化 totalpage:
// 查询总共有多少页的数据functiongetTotalPage(){
            jQuery.ajax({url:"/art/totalpage",type:"GET",data:{"psize":psize
                },success:function(result){if(result.code==200&& result.data!=null){
                        totalpage=result.data;}}});}getTotalPage();
  1. 后端处理请求
@RequestMapping("/totalpage")publicIntegertotalPage(Integer psize){if(psize !=null){// 参数有效int totalCount = articleService.getTotalCount();// 计算总页数int totalPage =(int)Math.ceil(totalCount *1.0/ psize);return totalPage;}returnnull;}
publicIntegergetTotalCount(){return articleMapper.getTotalCount();}
publicIntegergetTotalCount();
<selectid="getTotalCount"resultType="java.lang.Integer">
        select count(*) from articleinfo
    </select>

实现 四个点击效果

// 首页functionfirstClick(){
            location.href ="blog_list.html";}// 上一页functionbeforeClick(){if(pindex<=1){alert("已经是最前面了!");returnfalse;}
            pindex =parseInt(pindex)-1;
            location.href ="blog_list.html?pindex="+pindex+"&psize="+psize;}// 下一页functionnextClick(){
            pindex =parseInt(pindex)+1;if(pindex>totalpage){// 已经在最后一页了alert("已经是最后一页了");returnfalse;}
            location.href ="blog_list.html?pindex="+pindex+"&psize="+psize;}// 末页functionlastClick(){
            pindex = totalpage;
            location.href ="blog_list.html?pindex="+pindex+"&psize="+psize;}

验证

验证无误。

标签: 前端 javascript html

本文转载自: https://blog.csdn.net/yyhgo_/article/details/128768953
版权归原作者 yyhgo_ 所有, 如有侵权,请联系我们删除。

“实现分页查询”的评论:

还没有评论