实现分页查询

news2024/11/15 20:52:38

实现分页查询

  • 一、分页要素与语法
  • 二、例:博客系统文章列表页
    • 2.1 原始前端代码
    • 2.2 实现:查询分页数据
      • 验证
    • 2.3 实现 “首页” “上一页” “下一页” “末页”
      • 前端代码添加
      • 得到总页数
      • 实现 四个点击效果
      • 验证

一、分页要素与语法

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

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

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

2.1 原始前端代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>博客列表</title>
    <link rel="stylesheet" href="css/list.css">
    <link rel="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>
    <!-- 导航栏 -->
    <div class="nav">
        <img src="img/logo2.jpg" alt="">
        <span class="title">我的博客系统</span>
        <!-- 用来占据中间位置 -->
        <span class="spacer"></span>
        <a href="blog_list.html">主页</a>
        <a href="blog_edit.html">写博客</a>
        <a href="login.html">登陆</a>
        <!-- <a href="#">注销</a> -->
    </div>
    <!-- 版心 -->
    <div class="container">
        <!-- 右侧内容详情 -->
        <div class="container-right">
            <!-- 每一篇博客包含标题, 摘要, 时间 -->
            <div class="blog">
                <div class="title">我的第一篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=1" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <div class="blog">
                <div class="title">我的第二篇博客</div>
                <div class="date">2021-06-02</div>
                <div class="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>
                <a href="blog_content.html?id=2" class="detail">查看全文 &gt;&gt;</a>
            </div>
            <hr>
            <div class="blog-pagnation-wrapper">
                <button class="blog-pagnation-item">首页</button> 
                <button class="blog-pagnation-item">上一页</button>  
                <button class="blog-pagnation-item">下一页</button>
                <button class="blog-pagnation-item">末页</button>
            </div>
        </div>
    </div>
</body>
</html>

页面效果:

在这里插入图片描述

2.2 实现:查询分页数据

  1. 引入 jQuery
    <!-- 引入 jquery -->
    <script src="js/jquery.min.js"></script>
  1. 定义 pindex 和 psize
	<script>
        var pindex = 1; // 当前的页码 (默认)
        var psize = 2;  // 每页显示的条数信息 (默认)
    </script>
  1. 定义 getURLParam(key) 方法
// 获取当前 URL 中某个参数的方法
function getURLParam(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 和 psize
        function initPageParam(){
           var pi = getURLParam("pindex");     
           if(pi!=""){
            pindex=pi;
           }
           var pz = getURLParam("psize");     
           if(pz!=""){
            psize=pz;
           }
        }
        initPageParam();
  1. 查询分页数据
        // 查询分页数据
        function getList(){
            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){
                        // 循环拼接数据到 document
                        var 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")
    public List<ArticleInfo> getList(Integer pindex, Integer psize) {
        if (pindex == null || psize == null) {
            return null;
        }
        // 分页公式,计算偏移量
        int offset = (pindex - 1) * psize;
        return articleService.getList(psize, offset);
    }
    public List<ArticleInfo> getList(Integer psize, Integer offset) {
        return articleMapper.getList(psize,offset);
    }
    public List<ArticleInfo> getList(@Param("psize") Integer psize,
                                     @Param("offset") Integer offset);
    <select id="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 = 1var psize = 2;

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

在这里插入图片描述

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

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

前端代码添加

    <!-- 版心 -->
    <div class="container">
        <!-- 右侧内容详情 -->
        <div class="container-right" style="width: 100%;">
            <div id="listDiv">
                
            </div>
            
            <hr>
            <div class="blog-pagnation-wrapper">
                <button class="blog-pagnation-item" onclick="firstClick()">首页</button> 
                <button class="blog-pagnation-item" onclick="beforeClick()">上一页</button>  
                <button class="blog-pagnation-item" onclick="nextClick()">下一页</button>
                <button class="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:
        // 查询总共有多少页的数据
        function getTotalPage(){
            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")
    public Integer totalPage(Integer psize) {
        if (psize != null) {
            // 参数有效
            int totalCount = articleService.getTotalCount();
            // 计算总页数
            int totalPage = (int) Math.ceil(totalCount * 1.0 / psize);
            return totalPage;
        }
        return null;
    }
    public Integer getTotalCount(){
        return articleMapper.getTotalCount();
    }
    public Integer getTotalCount();
    <select id="getTotalCount" resultType="java.lang.Integer">
        select count(*) from articleinfo
    </select>

实现 四个点击效果

        // 首页
        function firstClick(){
            location.href = "blog_list.html";
        }

        // 上一页
        function beforeClick(){
            if(pindex<=1){
                alert("已经是最前面了!");
                return false;
            }
            pindex = parseInt(pindex)-1;
            location.href = "blog_list.html?pindex="+pindex+"&psize="+psize;
        }

        // 下一页
        function nextClick(){
            pindex = parseInt(pindex)+1;
            if(pindex>totalpage){
                // 已经在最后一页了
                alert("已经是最后一页了");
                return false;
            }
            location.href = "blog_list.html?pindex="+pindex+"&psize="+psize;
        }

        // 末页
        function lastClick(){
            pindex = totalpage;
            location.href = "blog_list.html?pindex="+pindex+"&psize="+psize;
        }

验证

验证无误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt音视频开发13-视频解码线程基类的设计

一、前言 这个解码线程基类的设计&#xff0c;是到目前为止个人觉得自己设计的最好的基类之一&#xff0c;当然也不是一开始就知道这样设计&#xff0c;没有个三五年的摸爬滚打以及社会的毒打&#xff0c;是想不到要这样设计的&#xff0c;一方面是要不断提炼各种视频类视频组…

伪逆矩阵 的使用

伪逆矩阵&#xff08;pseudo-inverse&#xff09;_Uglyduckling911的博客-CSDN博客_伪逆矩阵 一、什么是伪逆矩阵 若任意矩阵Am*n,B 为A的广义逆矩阵&#xff0c;若B满足下述条件&#xff08;Moore-penrose条件&#xff09;&#xff1a; &#xff08;1&#xff09;BAB B&am…

4.门面模式,组合模式,享元模式

门面模式 为了保证接口的可复用性&#xff08;或者叫通用性&#xff09;&#xff0c;我们需要将接口尽量设计得细粒度一点&#xff0c;职责单一一点。但是&#xff0c;如果接口的粒度过小&#xff0c;在接口的使用者开发一个业务功能时&#xff0c;就会导致需要调用 n 多细粒度…

【手把手】教你使用JMH和Disruptor - 多线程与高并发工具

JMH JMH全称是Java Microbenchmark Harness&#xff08;Java微基准测试&#xff09;&#xff0c;简单讲其实就是测一个方法的性能好坏。这个测试的框架是2013年发出来的&#xff0c;由JLT的开发人员开发&#xff0c;后来归到了OpenJDK下面&#xff0c;官网地址&#xff1a;htt…

运维实践 | OpenMLDB 跨机房容灾方案

背景 在单集群部署环境下&#xff0c;OpenMLDB 具备集群内节点级别的高可用能力。但若受到机房断电或者自然灾害等不可抗拒因素&#xff0c;则将造成的机房或大部分节点无法正常运转的情况&#xff0c;从而引发该集群状态异常&#xff0c;导致在线服务中断。为此&#xff0c;Op…

悉数美剧《黑客军团》中的黑客工具

本篇文章中主要列举《Mr. Robot》电视剧中主要用到的黑客工具&#xff0c;并对它们所对应的现实中的黑客工具做一简要介绍。Mr. Robot2015年美剧出了一部关于黑客题材的电视剧&#xff0c;相信爱看黑客电视剧、电影的同学们已经看过或者正在追这部神秘的《Mr. Robot》&#xff…

零基础学MySQL(四)-- 数据库最常用的操作【查询基础篇 -- 单表查询】

目录&#x1f4d4;一、最简单的 select 语句1️⃣基本语法2️⃣基本练习3️⃣补充说明(1) 使用表达式对查询的列进行运算(2) 在 select 语句中可使用 as 语句取别名&#x1f4d5;二、使用 where 子句进行过滤查询1️⃣基本语法2️⃣在 where 子句中经常使用的运算符3️⃣基本练…

4道面试题让你了解 ThreadLocal 的那点小秘密

我收集了4个面试中出现频率较高的关于ThreadLocal的问题&#xff1a; 什么是ThreadLocal&#xff1f;什么场景下使用ThreadLocal&#xff1f;ThreadLocal的底层是如何实现的&#xff1f;ThreadLocal在什么情况下会出现内存泄漏&#xff1f;使用ThreadLocal要注意哪些内容&…

工赋开发者社区 | 事件驱动架构要避开的 5 个陷阱

事件驱动架构非常强大&#xff0c;非常适合用在分布式微服务环境中。事件驱动架构提供了解耦的架构、更容易实现的可伸缩性和更高程度的弹性。请求应答&#xff08;客户端和服务器&#xff09;与事件流&#xff08;发布和订阅&#xff09;但是&#xff0c;与请求和应答类型的架…

防范DDOS攻击的最佳方法

Botnets是由多个感染的计算机(称为"bots"或"zombies")组成的网络。这些感染的计算机受到攻击者的控制,可以同时发送大量的数据流量到目标网站,导致DDoS(分布式拒绝服务)攻击。Botnets也可以用于从感染的计算机中获取私人信息,传播病毒和蠕虫,或者执…

Git使用个人访问令牌提交代码到仓库

文章目录前言解决方法1、创建自己的token2.1、使用token(classic)2.2、使用token(方法二)参考链接前言 2021年8月13日开始&#xff0c;GitHub在使用Git操作远程仓库时不再支持使用用户名密码形式进行身份验证&#xff0c;需使用个人访问令牌。 使用Git操作GitHub仓库时使用用户…

整合spring cloud云服务架构 - 企业分布式微服务云架构构建

1. 介绍 Commonservice-system是一个大型分布式、微服务、面向企业的JavaEE体系快速研发平台&#xff0c;基于模块化、服务化、原子化、热插拔的设计思想&#xff0c;使用成熟领先的无商业限制的主流开源技术构建。采用服务化的组件开发模式&#xff0c;可实现复杂的业务功能。…

电脑开不了机怎么办?排查这3种情况

电脑开不了机不一定是电脑故障损坏的问题&#xff0c;也可能是硬件或者是线路松动导致的。电脑开不了机的原因有很多&#xff0c;电脑开不了机怎么办&#xff1f;我们先来了解下主要是哪些原因&#xff0c;排查出原因才好对症下药。 操作环境&#xff1a; 演示机型&#xff1a;…

Leetcode刷题注意点

时间复杂度&#xff1a;一个句子被执行多少次。 空间复杂度&#xff1a;一个算法在运行过程中临时占用存储空间大小的量度 列表可以用.append() 添加数据 字符串 用 s q 这个写法。 03 此题关键是哈希表的运用。 dic set() 表示取出nums中的key 并且set里面元素不重复 53…

python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用

普通数码相机记录了红、绿、蓝三种波长的光&#xff0c;多光谱成像技术除了记录这三种波长光之外&#xff0c;还可以记录其他波长&#xff08;例如&#xff1a;近红外、热红外等&#xff09;光的信息。与昂贵、不易获取的高光谱、高空间分辨率卫星数据相比&#xff0c;中等分辨…

2023年广州Java培训机构排行榜来啦,快来围观!

到底哪个Java培训机构靠谱&#xff1f;Java培训怎么选&#xff1f;如何在千万培训机构中一眼寻觅到自己的唯一所爱?别疑惑&#xff0c;别迷茫&#xff0c;小编带着2023最新数据来了&#xff0c;保证你看完有“山重水复疑无路&#xff0c;柳暗花明又一村”的豁然开朗感&#xf…

在线 OJ 项目(四) · 前端设计与项目总结

一、页面设计题目列表页题目详情页二、获取到后台数据实现思路遇到换行问题小结引入 ace.js三、项目总结接下来将实现 online-oj 项目的前端界面。 先随便从各大网站上下载网页模板~ 因为好看的前端网页设计需要美工的&#xff0c;我们只是程序员… 一、页面设计 但是我们可…

【可解释性机器学习】详解Python的可解释机器学习库:SHAP

详解Python的可解释机器学习库&#xff1a;SHAPSHAP介绍SHAP的用途SHAP的工作原理解释器Explainer局部可解释性Local Interper单个prediction的解释多个预测的解释获取单个样本的Top N个特征值及其对应的SHAP值全局可解释性Global Interpersummary_plotFeature ImportanceInter…

SkyWalking 极简入门

SkyWalking 极简入门1.概述1.1 概念1.2 功能列表1.3 整体架构1.4 官方文档2. 搭建 SkyWalking 单机环境2.1 Elasticsearch 搭建2.2 下载 SkyWalking 软件包2.3 SkyWalking OAP 搭建2.4 SkyWalking UI 搭建2.5 SkyWalking Agent2.5.1 Shell2.5.2 IDEA3. 搭建 SkyWalking 集群环境…

【4】Linux实用操作

学习笔记目录 初识Linux--入门Linux基础命令--会用Linux权限管控--懂权限Linux实用操作--熟练实战软件部署--深入掌握脚本&自动化--用的更强项目实战--学到经验云平台技术--紧跟潮流 各类小技巧&#xff08;快捷键&#xff09; ctrl c强制停止 Linux某些程序的运行&am…