首页 > 其他分享 >[RuoYi二次开发]数据分页

[RuoYi二次开发]数据分页

时间:2024-12-07 19:33:48浏览次数:7  
标签:nio 22 RuoYi debug 137 二次开发 数据 分页

目录

一、前言

 二、RuoYi中的数据分页案例

三、源码分析 

 1、前端代码

2、后端代码

四、总结 


一、前言

数据分页是指将一批数据按照指定的大小分割成多个页面或数据块,每个页面或数据块包含一部分数据,用于分批显示和处理数据。数据分页通常用于网站、应用程序等需要处理大量数据的场景,以提高数据的加载速度和响应速度。

数据分页的核心思想是将大数据集合分割成多个小数据集合,每个小数据集合包含指定数量的数据,例如每页显示10条数据。在显示数据时,将数据按照指定的顺序和格式进行分页,每次显示一个页面或数据块。当需要访问下一页数据时,再加载下一个页面或数据块,以此类推。这样可以减少一次性加载大量数据的压力,提高数据的响应速度和用户体验。

 二、RuoYi中的数据分页案例

在登录日志中,我们可以看到若依界面处理数据,在一个界面展示不过来的情况下会选择采纳多页处理,其中就使用到了数据分页,以下就是若依中的登录日志的分页效果。

三、源码分析 

 1、前端代码

在src->views->monitor->logininfor->index.vue我们可以看到登录日志的前端代码,其中的<pagination/> 为分页组件。

 初始化了total为0 所返回的total的值取决于后台所传来的数据条数; @pagination所绑定的getList方法 负责处理所返回的数据 实现分页功能。

 其中getList方法中调用了List函数

 其中返回的rowstotal将赋值给logininfor->index.vue中js定义的listtotal

2、后端代码

startPage()getDataTable(List)分别起到了分页功能的实现和返回数据库数据的功能。任何分页功能的实现都需先执行startPage()这个方法。 

在PageInfo(list)中可以看到 调用了父类构造器

MyBatis 通过修改SQL 语句,多请求了一句SQL 语句:SELECT count(0) FROM sys_logininfor返回了总行数给到Page 对象的total 成员。然后通过子类Page 强转父类List 对象,访问其成员total 值,赋值给PageInfo 父类成员total,即this.total = ((Page)list).getTotal(); 

可以看到的后端log输出结果

22:56:49.837 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==>  Preparing: SELECT count(0) FROM sys_logininfor
22:56:49.837 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==> Parameters: 
22:56:49.840 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - <==      Total: 1
22:56:49.842 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==>  Preparing: select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor order by info_id desc LIMIT ?
22:56:49.843 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==> Parameters: 10(Integer)
22:56:49.844 [http-nio-8080-exec-29] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - <==      Total: 10

SQL 被MyBatis 拦截改变了,selectOperLogList 函数对应两句SQL:

  • 一句查询表的总行数[count(0)]
  • 一句对查询数据做了行数输出限制[LIMIT 10] 

count(0):表数据的总行数
LIMIT 有两种形式:

  • LIMIT num:数据的前num 个
  • LIMIT offset,num:从offset 偏移位置开始的num 个数据

当我们选择第二页的时候,后端输出log为

22:37:13.786 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==>  Preparing: SELECT count(0) FROM sys_logininfor
22:37:13.786 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==> Parameters: 
22:37:13.789 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - <==      Total: 1
22:37:13.790 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==>  Preparing: select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor order by info_id desc LIMIT ?, ?
22:37:13.791 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==> Parameters: 10(Long), 10(Integer)
22:37:13.795 [http-nio-8080-exec-28] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - <==      Total: 10

先SELECT count(0)从后台数据库sys_loginifor取出所有数据,然后再去筛选相应的数据值;limit后面的10(Long)作用是显示当前页面比如此时我取到第二页面之前也有储存的数据多少,因为是第二页面所以已经储存了10个数据,即是10(Long);而后面的10(Integer)的作用就是等价于PageSize就是每页数据多少;Total:10就是表示当前页面数据总量多少。

四、总结 

在实际过程中可以使用数据分页,加快数据的加载,提高内存的使用率,而且因为是实时读取,在后端的数据进行改变的时候也能进行及时的更新,在众多优秀的项目中都有使用到数据分页这一技术。

标签:nio,22,RuoYi,debug,137,二次开发,数据,分页
From: https://blog.csdn.net/asd2022714/article/details/144209603

相关文章

  • 按需分页
    根据虚拟内存的概念,要执行某个进程,只需要在主内存中存在一部分过程,这意味着在任何时候只有少数几页才会出现在主内存中。但是,决定哪些页面需要保存在主存储器中,哪些页面需要保存在辅助存储器中,这很困难,因为不能预先说明某个过程在特定时间需要特定的页面。因此,为了克服这个问......
  • 超全致远OA整套视频学习教程及二次开发技转攻略(火)
    引言    致远OA作为国内领先的办公自动化系统,凭借其强大的功能和灵活的二次开发能力,成为众多企业数字化转型的首选平台。为了帮助广大开发者和企业用户更好地掌握致远OA的实施与二次开发技术,我精心准备了超全致远OA视频学习教程及二次开发技转攻略,全面覆盖应用实施、功......
  • AutoCAD2021二次开发——入门
    前言:本文是基于AutoCAD2021SDK 即ObjectARX_for_AutoCAD_2021_Win_64bit_dlm,实现AutoCAD二次开发,主要讲解如何基于SDK实现自己初步简单的命令开发。开发环境搭建下载安装如下软件以及SDKAutoCAD2021、VisiualStudio2019、ObjectARXWizard2021、ObjectARX_for_Aut......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(10).系统集成:MES与其他制造系统
    系统集成:MES与其他制造系统的接口开发在电动汽车制造过程中,制造执行系统(MES)作为生产管理的核心系统,需要与多种其他制造系统进行高效的数据交换和业务协同。这些系统包括但不限于生产计划系统(APS)、企业资源规划系统(ERP)、供应链管理系统(SCM)、质量管理系统(QMS)以及自动化设备(......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(19).部署与运维:MES系统上线后的
    部署与运维:MES系统上线后的管理与维护在电动汽车制造执行系统(MES)软件上线后,管理和维护是确保系统稳定运行、高效生产的关键环节。这一节将详细探讨MES系统上线后的管理与维护,包括系统监控、故障排除、性能优化、数据备份与恢复、系统升级和安全管理等方面的内容。系统监......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(20).持续改进:MES系统在电动汽车
    持续改进:MES系统在电动汽车制造中的迭代升级在电动汽车制造过程中,制造执行系统(MES)的持续改进是确保生产效率、质量控制和数据分析的关键。本节将详细介绍MES系统在电动汽车制造中的迭代升级原理和具体实践,包括需求分析、功能优化、系统集成和测试验证等关键步骤。1.需求......
  • ruoyi-nbcio为安全起见actuator为仅暴露health端点
    actuator一直是个安全的大问题,所以以后还是要尽量避免使用或小心使用1、目前先仅暴露health端点的方式来处理,一位网友提醒的安全问题2、否则可以通过/actuator/env进行访问,有很多信息回泄漏,大家注意一下。3、同时通过下面方式关闭也不大合适,因为本身系统有监控需要打开,而......
  • CAD 二次开发入门与实践:以 C# 为例
    摘要: 本文详细介绍了如何使用C#进行CAD软件的二次开发。首先阐述了CAD二次开发的概念、意义与应用场景,接着深入探讨了开发环境的搭建,包括CAD相关API的引用与C#开发工具的配置。随后重点讲解了基于C#的CAD二次开发的核心技术,如基本图形绘制、图层管理、块操作......
  • NX二次开发(C#)UI Styler选择对象
    1.利用C#语言对NX进行二次开发,目前做到了调用NX中的类选择界面,如下图所示,可以对零件的各个面进行选择。  mask[0]=newSelection.MaskTriple(NXOpen.UF.UFConstants.UF_solid_type,0,0);//选择实体 mask[1]=newSelection.MaskTriple(NXOpen.UF.UFConstants.UF_f......
  • 解读TinyEngine低代码引擎2.0,如何改变前端二次开发模式
    本文分享自华为云社区《TinyEngine低代码引擎2.0新特性介绍》,作者:OpenTiny。 自从TinyEngine开源以来,众多开发者已经将TinyEngine应用于生产环境,见证了其在实际项目中的表现。然而,随着项目的持续迭代和用户群体的不断扩大,我们发现用户在深度定制方面会遇到一些阻碍,其中最核心的......