67、数据访问-crud实验-分页数据展示

67、数据访问-crud实验-分页数据展示

分页数据展示是数据访问中常见的功能,用于将大量数据分割成多个页面显示,提升用户体验和系统性能。以下是分页数据展示的相关介绍:

#### 基本原理

1. **确定每页显示数量**:设定每页显示的数据条数(`pageSize`),如每页显示10条。

2. **计算总页数**:根据总数据量(`totalCount`)和每页显示数量,计算总页数(`totalPage`):

   $$

   totalPage = \lceil \frac{totalCount}{pageSize} \rceil

   $$

3. **获取当前页数据**:根据当前页码(`currentPage`),计算数据起始位置(`offset`),从数据源中获取对应的数据:

   $$

   offset = (currentPage - 1) \times pageSize

   $$

   查询语句示例(使用MySQL的`LIMIT`和`OFFSET`):

   ```sql

   SELECT * FROM table LIMIT pageSize OFFSET offset

   ```

#### 实现步骤

**后端实现:**

1. **接收分页参数**

   - 接收前端传递的当前页码(`currentPage`)和每页显示数量(`pageSize`)。

2. **查询数据**

   - 根据分页参数,查询当前页的数据和总数据量。

   - 使用数据库的分页功能,如MySQL的`LIMIT`和`OFFSET`,或借助分页插件(如MyBatis的PageHelper)。

3. **封装分页结果**

   - 将当前页数据、总数据量、总页数等封装成分页对象,返回给前端。

**前端实现:**

1. **发送分页请求**

   - 向后端发送包含当前页码和每页显示数量的请求。

2. **展示数据**

   - 接收后端返回的分页数据,展示当前页的数据。

3. **分页导航**

   - 根据总页数生成分页导航,支持用户点击页码、上一页、下一页等操作。

   - 更新当前页码,重新发送请求获取数据。

#### 示例代码

**后端(Java + Spring Boot):**

```java

// 分页查询方法

@GetMapping("/data")

public PageData fetchData(@RequestParam(defaultValue = "1") int page,

                          @RequestParam(defaultValue = "10") int size) {

    // 使用PageHelper进行分页查询

    PageHelper.startPage(page, size);

    List<Data> dataList = dataService.getAllData();

    

    // 封装分页结果

    PageInfo<Data> pageInfo = new PageInfo<>(dataList);

    PageData pageData = new PageData();

    pageData.setList(dataList);

    pageData.setTotal(pageInfo.getTotal());

    pageData.setSize(size);

    pageData.setPage(page);

    pageData.setPages(pageInfo.getPages());

    

    return pageData;

}

// 分页数据对象

public class PageData {

    private List<?> list;

    private long total;

    private int size;

    private int page;

    private int pages;

    // 省略getter和setter方法

}

```

**前端(Vue.js):**

```html

<template>

  <div>

    <!-- 数据列表 -->

    <ul>

      <li v-for="item in dataList" :key="item.id">{{ item.name }}</li>

    </ul>

    

    <!-- 分页导航 -->

    <div class="pagination">

      <button @click="prevPage" :disabled="page === 1">上一页</button>

      <span v-for="pageNum in pages" :key="pageNum" @click="gotoPage(pageNum)">

        {{ pageNum }}

      </span>

      <button @click="nextPage" :disabled="page === pages">下一页</button>

    </div>

  </div>

</template>

<script>

export default {

  data() {

    return {

      dataList: [], // 当前页数据

      total: 0, // 总数据量

      size: 10, // 每页显示数量

      page: 1, // 当前页码

      pages: 0, // 总页数

    };

  },

  

  methods: {

    fetchData() {

      // 发送分页请求

      axios.get('/data', {

        params: {

          page: this.page,

          size: this.size,

        },

      }).then((res) => {

        // 处理返回的分页数据

        this.dataList = res.data.list;

        this.total = res.data.total;

        this.pages = res.data.pages;

      });

    },

    

    prevPage() {

      if (this.page > 1) {

        this.page--;

      }

      this.fetchData();

    },

    

    nextPage() {

      if (this.page < this.pages) {

        this.page++;

      }

      this.fetchData();

    },

    

    gotoPage(pageNum) {

      this.page = pageNum;

      this.fetchData();

    },

  },

  

  mounted() {

    this.fetchData();

  },

};

</script>

```

#### 优化与注意事项

- **性能优化**

  - 避免一次性查询所有数据,仅查询当前页所需数据。

  - 对于大数据量,考虑使用延迟加载或无限滚动等技术。

- **用户体验**

  - 提供清晰的分页导航,显示当前页码和总页数。

  - 支持跳转到指定页码和快捷键操作。

- **安全性**

  - 对分页参数进行校验,防止恶意请求。

  - 避免暴露敏感数据,如总数据量等。

通过以上步骤,可以实现分页数据展示功能,提升系统的可用性和性能。

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

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

相关文章

常见 Web 服务器

Web 服务器有很多种&#xff0c;功能和用途略有不同&#xff0c;下面我会分类介绍主流的 Web 服务器&#xff08;包含静态/动态/反向代理支持&#xff09;并重点说明类似 Tomcat 的 Java 支持型。 常见 Web 服务器分类 类型名称描述与特点&#x1f310; 静态资源服务器Nginx高…

【MacOS】M3 Pro芯片MacBook极速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安装 Kubernetes。 Colima 轻量、高效&#xff0c;并且在 Apple Silicon 架构上表现出色。 下面是详细的、一步一步的安装和配置指南。 核心思路 我们将通过以下步骤完成整个过程&#xff1a; 准备工作: 安装必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用图标导入库报错

import { Add } from "nutui/icons-react-taro"; 官网的导入的库名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人学js逆向比赛第一届第七题

分析响应 看到响应体里面的data是个字体加密&#xff0c;于是这里可以看到woff文件也给返回了&#xff0c;这里现分析这个文件。 打开可以看到这里a351对应的是3和页面中的3是对应的&#xff0c;于是用ddddocr动态识别字体文件中的字体&#xff0c;然后对应对应的字体替换是不…

股票心理学习篇:交易的人性弱点 - 频繁交易

以下内容为学习时的笔记整理&#xff0c;视频作者来自B站&#xff1a;老猫与指标 视频链接&#xff1a;频繁交易必死&#xff1f;底层逻辑深度剖析&#xff0c;老猫的的破局心法与实战策略分享 交易的人性弱点 - 频繁交易 主讲人&#xff1a; 老猫 1. 引言&#xff1a;问题的…

WPF入门 #1 WPF布局基础、WPF样式基础、WPF数据模板、WPF绑定

WPF当中有许多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下来分别介绍一下各个布局容器控件。 布局基础 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…

开源大型语言模型的文本记忆新突破!

在现代科技的推动下&#xff0c;人工智能领域正在不断地突破人类认知的极限。今年&#xff0c;由斯坦福大学、康奈尔大学和西弗吉尼亚大学的计算机科学家们&#xff0c;与法律学者共同展开了一项引人入胜的研究&#xff0c;聚焦于开源大型语言模型的文本记忆表现。这项研究不仅…

LeetCode 3090.每个字符最多出现两次的最长子字符串

题目链接 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/ 题目描述 给定一个字符串 s&#xff0c;找出满足每个字符最多出现两次的最长子字符串&#xff0c;并返回其长度。 示例 输入&#xff1a;s "aabba" 输出&#xff1a;5解…

使用开源NVIDIA cuOpt加速决策优化

使用开源NVIDIA cuOpt加速决策优化 文章目录 使用开源NVIDIA cuOpt加速决策优化决策优化的现实挑战供应链优化的复杂性实时决策的挑战计算复杂性的挑战 NVIDIA cuOpt&#xff1a;GPU加速的决策优化解决方案cuOpt的核心技术架构支持的优化问题类型性能优势分析 实际应用案例&…

【JVM 09-垃圾回收】

垃圾回收 笔记记录 1. 如何判断对象可以回收1.1 引用计数法1.1.1 缺点 1.2 可达性分析算法1.2.1 可达分析、根对象1.2.2 优缺点 1.3 四种引用(强软弱虚)1.3.1 软引用的实际使用案例1.3.2 软引用-引用队列1.3.3 弱引用的实际使用案例 2. 垃圾回收算法2.1 标记清除算法2.2 标记整…

《二叉搜索树》

引言&#xff1a; 上次我们结束了类和对象的收尾&#xff0c;之后我们就要学习一些高级的数据结构&#xff0c;今天我们先来看一个数据结构-- 二叉搜索树。 一&#xff1a; 二叉搜索树的概念(性质) 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是…

【Redis】Sentinel哨兵

&#x1f6e1;️ 深入理解 Redis Sentinel&#xff1a;高可用架构的守护者 在实际开发中&#xff0c;我们常用 Redis 构建缓存系统或数据中间件。然而&#xff0c;主从复制虽然能实现数据同步&#xff0c;但无法自动故障转移&#xff08;failover&#xff09;&#xff0c;这就…

Shell脚本应用及实战演练

文章目录 一、Shell脚本语言的基本结构1、Shell脚本的用途&#xff1a;2、 Shell脚本基本结构&#xff1a;3、 创建Shell脚本过程4、 脚本注释规范 二、Shell脚本语言的变量用法详解位置与预定义变量 三、 Shell字符串详解1、Shell字符串拼接2、Shell字符串截取3、 Shell的格式…

软件工程瀑布模型学习指南

软件工程瀑布模型学习指南 一、瀑布模型核心概念 1.1 定义与特点 瀑布模型是一种经典的软件开发流程,将项目划分为顺序性的阶段,每个阶段有明确的输入和输出,如同瀑布流水般单向推进。其特点包括: 阶段间具有明确的顺序性和依赖性强调文档驱动和阶段评审适合需求明确、稳…

获取gitlab上项目分支版本(二)

获取gitlab上项目分支版本_gitlab代码分支版本在哪-CSDN博客 原先写过一版&#xff0c;但是这次想更新一下项目的分支信息时&#xff0c;提示我 git服务器上的Python版本是2.7.3&#xff0c;这个错误表明当前Python环境中没有安装requests库&#xff0c;服务器也没有连接外网&…

主流防火墙策略绕过漏洞的修复方案与加固实践

主流防火墙策略绕过漏洞的修复方案与加固实践 流量关键点分析&#xff08;攻击手法&#xff09; 攻击者通过精心构造的TCP序列号攻击和恶意标志组合绕过防火墙DPI检测&#xff0c;核心手法如下&#xff1a; TCP连接建立&#xff08;正常握手&#xff09; 1049&#xff1a;客户…

泛微OAe9-后端二开常见数据库操作

泛微OAe9-后端二开常见数据库操作 文章目录 泛微OAe9-后端二开常见数据库操作一、RecordSet1 RecordSet 操作OA本身的表2 RecordSet 操作OA 本身的存储过程 二、RecordSetTrans三、RecordSetDataSource四、原生 jdbc 一、RecordSet RecordSet 适用于操作 OA 自己的库。OA 数据库…

【数据分析八:hypothesis testing】假设检验

本节我们讲述假设检验和抽样方法 有关假设检验的详细内容&#xff0c;可以参考我以往的博客 概率论与数理统计总复习_概率论与数理统计复习-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞33次&#xff0c;收藏23次。中科大使用的教辅《概率论和数理统计》&#xff0c;带大家复…

AI免费工具:promptpilot、今天学点啥、中英文翻译

promptpilot 激发模型潜能&#xff0c;轻松优化 Prompt https://promptpilot.volcengine.com/startup 今天学点啥 https://metaso.cn/study 能生成网页和语音播报 中英文翻译 沉浸式翻译&#xff0c;浏览器插件&#xff0c;ai翻译

计算机网络学习笔记:TCP三报文握手、四报文挥手

文章目录 前言一、TCP三报文握手二、TCP四报文挥手三、TCP保活计时器 前言 TCP通信&#xff0c;通常需要经历三个阶段&#xff1a;三报文握手->发送&#xff0c;接收数据->四报文挥手。 一、TCP三报文握手 三报文握手处于TCP的连接建立阶段&#xff0c;主要解决了以下的…