RuoYi中数据分页功能实现的步骤(nvliz)

目录

前言

数据分页的作用

RuoYi中的实现步骤

        前端的显示界面(实例介绍)

        源码分析(前端)

Pagination(分页组件)介绍

        前端:getList()(方法源码分析)

源码分析(后端)

        后端:List()(源码分析)

pagehelper.startpage()方法

roleService.selectRoleList()

getDataTable()

        rspData.setTotal()分析

LIMIT ? 的含义


前言

        部署好的项目,随着时间的变迁,后端的数据也会变得越来越庞大,慢慢的系统响应时间增长,用户体验下降,我们后端的SQL服务由于慢慢增加的“载重”,犹如从一辆快速的高铁变成充满负荷的绿皮火车,这个时候“乘客”的压力就给到了我们这些对这个列车负责的“人员”,我们应该立即采取行动,对系统进行优化升级。通过数据分页,数据库索引优化,查询缓存,分表分库等策略,减轻SQL服务的负担,提升数据处理效率。同时,加强系统监控,及时发现并解决性能瓶颈,确保列车安全、准时地抵达每一位“乘客”的目的地,重拾用户的信任与满意度。

      //**********************一声巨响牛马登场,(nvliz o.o)***********************//

数据分页的作用

        1.   提高用户体验 :  当数据量很大时,一次性加载所有数据会给用户造成浏览和查找的不便,分页可以减少单次加载的数据量,使用户能够更快地找到他们需要的信息。

        2.   减轻服务器压力 :  如果服务器一次性返回大量数据,会占用大量服务器资源,可能导致服务器响应缓慢甚至崩溃。分页可以减少单次请求的数据量,降低服务器的负载。

        3.   优化网络传输 :   在网络传输数据时,分页可以减少数据传输量,降低网络拥塞的可能性,特别是在移动网络环境下,这一点尤为重要。

        4.   节约存储空间 :   在某些应用场景下,如缓存数据到本地,分页可以减少需要缓存的数据量,节约存储空间。(瞎编的o.o,有些框架的机制会缓存到本地,应该可以减少储存空间)

RuoYi中的实现步骤

        接下来,用二次开发的万金油框架RuoYi来具体展示数据分页的实现步骤。怪不得人家优秀呢人家在我们进行二次开发前就给我们铺好路了,站在巨人的肩膀上就是看的远啊~~~~~。

        前端的显示界面(实例介绍)

         在这张图片中,这个路径下,你可以看到数据库返回的部分,右下角是RuoYi在实现分页的前端显示,可以看到一共有两条记录。

        源码分析(前端)

        进入到这个路径下,在这个index.vue的文件中我们可以看到上面实例界面的前端代码。

路径://(RuoYi-Vue----ruoyi-ui----src----views----system----role-----index.vue)

Pagination(分页组件)介绍

        在前端中有一个专门给数据分页的分页组件叫 Pagination ,Pagination 组件是前端开发中常用的一种用户界面元素,它用于在长列表数据或大量内容中实现分页显示。

        Pagination 组件是一组用于在多个页面之间导航的控件,通常包括页码链接、上一页和下一页按钮,有时还包括直接跳转到首页和尾页的链接,RuoYi兼具上述所有的功能。

        找到index.vue文件下的pagination组件,如下图:

        上面需要注意是双向绑定的作用:双向绑定是Vue.js(以及其他一些前端框架,如Angular)中的一个核心概念,它允许开发者在一个方向上自动更新数据的同时,在另一个方向上也自动更新。这意味着当数据模型(通常是JavaScript对象)的状态发生变化时,视图(即DOM元素)会自动更新以反映这些变化;反之,当视图中的数据发生变化(例如用户输入)时,绑定的数据模型也会自动更新。

        所以根据图中的注释,可以得出的信息是,在分页组件中,最主要的逻辑就是通过getList()方法重新获取数据列表,换句话描述,分页功能的实现,他的核心是getList的这个方法。

        前端:getList()(方法源码分析)

首先,我们进入到这个方法中去,他的代码如下:

        图中可能些许凌乱,这里做一个总结:就是调用后端一个API接口,获取到它的返回值,根据返回值中的总条数进行分页。

        我们也可以打开开头展示的实例的浏览器的检查界面来看里面具体的一些参数:

        感觉太小o.o,我们可以切换到负载界面:

        切到预览看后端返回的数据:

        后端的日志:

到这呢,我们前端的工作的就完毕了,接下来我们分析我们后端的代码

源码分析(后端)

        在后端,通过GetMapping("/list") 去响应前端的Http请求。

路径为~~~~上面自己看太长了QAQ,藏宝一样的。

        后端:List()(源码分析)

注意:这里的list是个数组,并不是一个方法名,下面图中是TableDataInfo list(SysRole role),方法签名为TableDataInfo(),list是该方法中的属性,在返回的参数这一点也可以体现。

pagehelper.startpage()方法

        上面的图中提到startPage()是mybatis提供的一个方法,但是在这个方法里面我们没有刚才看到的那两个值(pagename和pagesize),说明他在这里应该只是一个调用,并没有真正的实现分页的功能,他只是把这个pagehelper.startpage()封装到了这个方法里面,我们按住ctrl,进入到这个方法里面去看一下:

欸嘿,它里面居然还是个调用,敲个代码,玩起推理来了。

此处应该有:就这样一层一层的拨开他的心。    -------------《洋葱》

我们在进:

        如上这个方法函数的庐山真面目就出现了,可以看到参数的获取和分页参数的设置。

roleService.selectRoleList()

        这是roleService接口中的一个方法,它的目的是根据传入的SysRole对象中的属性值来筛选数据库中的角色记录。这个方法使用MyBatis来实现数据访问。(AI生成)                                               他的背后应该是服务层的实现,使用了SQL或者mybatis的功能,去表里返回我们要查找的数据。(o.o上课听了,但是忘了)        

getDataTable()

        我们按照老样子进入到getDataTable():

在上图比较难以理解的就是最后那句

rspData.setTotal(new PageInfo(list).getTotal());

接下来详细分析一波:

        rspData.setTotal()分析

首页创建了一个PageInfo对象(new PageInfo(list))

可以看到它是公共构造函数,它接受一个泛型列表List<T>作为参数。这个构造函数允许你创建一个PageInfo对象,它会包含整个列表,并且假设每页默认显示8条记录。这个PageInfo对象通常用于分页显示数据,它包含了分页所需的信息,如总记录数、总页数、当前页码等。

然后使用了.getTotal()的方法

传入的参数total值赋给当前对象的total字段。this关键字是对当前对象的引用。

rspData.setTotal(),他这的setTotal()其实就是上面的图片中的那个方法,确实有点多此一举了,但是这样前端就可以知道总共有多少条记录,从而正确地显示分页控件和进行分页操作。

        到这Ruoyi的分页就全部分析完毕了。

(*************任务**********)

LIMIT ? 的含义

其他关于日志中LIMIT ? 后面值的含义。

答案:

1.当LIMIT后面只有一个数值时,这个数值表示返回的最大记录数。

2.当LIMIT后面有两个数值时,第一个数值表示返回记录的起始位置(从0开始计数),第二个数值表示返回的最大记录数

这是我截取的两端不同查询条件的日志,可以看到当我啥都不选择的时候,他的LIMIT后面是空的但是在我加上条件之后;

这里添加的条件是一段日期,可以发现在比较长的日志中,我们SQL语句已经改变。(即说明我们的答案)

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

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

相关文章

HarmonyOS 5.0应用开发——全局广播的使用

【高心星出品】 文章目录 全局广播的使用公共事件接受系统公共事件原理 发布与订阅自定义公共事件订阅系统事件 全局广播的使用 全局广播可以用来做应用间通信&#xff0c;进程间通信&#xff0c;包含订阅、发布等功能。 公共事件 CES&#xff08;Common Event Service&…

ceph存储池

1、存储池 1、存储池的概念 存储池就是ceph的逻辑分区&#xff0c;专门用来存储对象的 特点 将文件切片成对象&#xff0c;通过hash算法&#xff0c;找到存储池中的pg&#xff0c;池中的pg根据crush算法找到osd节点 存储中的PG数量对性能有重要的影响&#xff0c;过多和过少…

Ollama记录

先在官网下载Ollama 模型下载 ollama run qwen2:0.5b 可以快速部署很多模型 方便 可以替换openai api key from openai import OpenAIclient OpenAI(base_url https://127.0.0.1:11434/v1,api_keyollama, # required, but unused )response client.chat.completions.…

锻造船用发动机动力系统,铸强船舶“心脏”

船舶是海洋、湖泊及河流中重要的水上交通工具&#xff0c;不仅能够促进海上经济的发展&#xff0c;还能够保卫国家的制海权。船舶动力装置&#xff0c;也就是船舶的核心动力源——船用发动机动力系统对船舶的重要作用不言自明&#xff0c;关系到船舶的性能质量&#xff0c;能够…

LIN状态管理

文章目录 前言一、状态管理二、实现过程三、response_error信号的变化条件四、节点内部报告五、测试应用方式1&#xff1a;LIN ISC方式2&#xff1a;CAPL脚本方式 前言 在LIN专栏的文章中&#xff0c;我们介绍了 LIN的网络管理&#xff1a;LIN网络管理&#xff1a;休眠&唤…

云帆在线学习考试系统对国产化数据库的支持情况说明

云帆在线学习考试系统对国产化数据库的支持情况说明 云帆学习考试系统是一款优秀的学习和考试系统&#xff01;多年以来一直深耕在线教育板块&#xff0c;积累了丰富的行业经验&#xff0c;多年来的产品和技术沉淀&#xff0c;服务了众多政府机构、知名高校、企事业单位。 今…

反向传播算法中的误差项

背景 在反向传播算法中&#xff0c;我们需要计算每个神经元的误差项&#xff0c;以便更新网络中的权重。对于输出层的神经元&#xff0c;误差项的计算公式如下&#xff1a; 其中&#xff1a; E是损失函数&#xff08;例如均方误差&#xff09;。 zk 是输出层神经元的加权输入&a…

如何高效整合金蝶云星辰采购入库单与聚水潭系统

星辰-采购入库单集成到聚水潭的技术实现 在企业信息化管理中&#xff0c;数据的高效流转和准确对接至关重要。本文将分享一个实际案例&#xff1a;如何通过轻易云数据集成平台&#xff0c;将金蝶云星辰V2系统中的采购入库单数据无缝集成到聚水潭系统中&#xff0c;实现业务流程…

Uniapp的App环境下使用Map获取缩放比例

概述 目前我试过的就是你用vue后缀是拿不到比例的你可以用nvue当然uniapp的uvue应该是更加可以的我使用的是高德所以你得在高德的后台声请原生的Android的key才可以如果是vue3的开发模式的话不用使用this来获取当前对象使用scale对象来接受和改变缩放比例会比较友好然后直接走…

C++入门项目:Linux下C++轻量级Web服务器 项目详解(小白篇)

拿到一个项目首先先跑通&#xff0c;然后再慢慢来看代码&#xff0c;关于怎么将这个项目跑通&#xff0c;上一篇已经讲过&#xff0c;感兴趣的小伙伴可以移步下面的链接&#xff0c;或者其他博主的教程。 C入门项目&#xff1a;Linux下C轻量级Web服务器 跑通|运行|测试&#xf…

RuoYi集成Drools,并实现数据库获取规则

Drools是一个开源的业务规则管理系统&#xff08;BRMS&#xff09;和规则引擎&#xff0c;它允许开发者以接近自然语言的形式定义业务规则&#xff0c;并将这些规则应用到应用程序中&#xff0c;实现业务逻辑的自动化和决策过程的优化。Drools基于Java语言开发&#xff0c;使用…

什么是API接口?如何调用API接口?

一、什么是 API 接口 定义 API&#xff08;Application Programming Interface&#xff09;即应用程序编程接口。它是一组定义好的规则和协议&#xff0c;允许不同的软件应用程序之间进行通信和交互。可以把 API 想象成是餐厅的服务员&#xff0c;当顾客&#xff08;一个软件应…

BurpSuite-6(验证码识别)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;burp(6)暴力破解与验证码识别绕过_哔哩哔哩_bilibili 一、下载 github地址&#xff1a;GitHub - f0ng/captcha-killer-modified: captcha-killer…

【JavaEE】多线程(7)

一、JUC的常见类 JUC→java.util.concurrent&#xff0c;放了和多线程相关的组件 1.1 Callable 接口 看以下从计算从1加到1000的代码&#xff1a; public class Demo {public static int sum;public static void main(String[] args) throws InterruptedException {Thread …

Go 程序编译的步骤

Go程序编译的步骤 词法分析&#xff08;Lexical Analysis&#xff09; Go编译器首先对源代码进行词法分析&#xff0c;将代码拆分成标记&#xff08;tokens&#xff09;&#xff0c;这些标记是编程语言的最小单位&#xff0c;如关键字、变量名、操作符等。 作用&#xff1a;生…

SD-WAN服务商应该怎么挑选?

随着企业对高效、灵活网络的需求不断增长&#xff0c;SD-WAN技术逐渐成为市场热点。然而&#xff0c;面对众多服务商的多样化方案&#xff0c;如何选择最适合自己企业的服务商是一个重要的问题。SD-WAN服务商之间在技术、功能和服务等方面存在差异&#xff0c;企业需要根据自身…

三相LCL并网逆变器--仿真验证

根据前面的博客的讲解&#xff0c;确定主电路参数如下 名称/单位 值 名称/单位 值 额定功率P/kW 20 开关频率fsw/kHz 10 母线电压Udc/V 720 逆变器侧电感L1/mH 1.8 额定电流Ireated/A 30 并网测电感L2/mH 0.4 PCC电压/Us/V 220 滤波电容C/uF 4.7 电网频率f…

基于SpringBoot+Vue的服装生产管理系统-无偿分享 (附源码+LW+调试)

目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 设计原则 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 系统流程和逻辑 7.2 系统结构 8. 数据库设计 8.1 数据库ER图 &#xff08;1&#xff09;管理员实体属性图…

告别充电焦虑:移动充电机器人的革命性解决方案

移动充电机器人作为新能源汽车领域的黑科技&#xff0c;正逐渐崭露头角。它的出现为电动汽车充电带来了全新的解决方案&#xff0c;解决了传统充电方式的诸多痛点。 新能源汽车具有诸多优点&#xff0c;如科技含量高、噪音小、使用成本低等&#xff0c;但 “续航焦虑”“充电焦…