【仿JFINAL框架】为了提供数据结构的普适性而提出的数据分页工具

本文主要是介绍【仿JFINAL框架】为了提供数据结构的普适性而提出的数据分页工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 提出目的
      • 分页工具类代码
      • 使用方法
      • 适用范围

提出目的

:这种方法无法体现分页的本质,重写分页算法的目的是为了让分页算法能够普适各种数据类型。即向分页算法中投入任何数据结构都可以进行分页

分页工具类代码

注:本文仅贴出代码,不介绍逻辑。 具体分页逻辑可以自行查看代码进行理解

  • 1.PageMe.java (继承JFinal封装的Page类,是分类方法返回的数据类型。该类使用java泛型类机制,让分类算法普适于任何数据结构)
/*** @author cc*/
public class PageMe<T> extends Page<T> {boolean firstPage;@Overridepublic boolean isFirstPage() {return firstPage;}public void setFirstPage(boolean firstPage) {this.firstPage = firstPage;}@Overridepublic boolean isLastPage() {return lastPage;}public void setLastPage(boolean lastPage) {this.lastPage = lastPage;}boolean lastPage;
}
  • 2.PageKit.java (分页工具类,内有分页方法paginate() )
/*** @author cc*/
public class PageKit<T> {
/**
* @return PageMe<T> 
*/public PageMe<T> paginate(int pageNumber, int pageSize, List<T> data) {PageMe<T> page = new PageMe<>();page.setTotalRow(data.size());page.setTotalPage(pageSize == 0 ? 1 : (int) Math.ceil((data.size() / pageSize)));//基础数据if (pageNumber < 1) {//如果pageNumber不符合规范,返回全部数据page.setList(data);return page;}page.setFirstPage(pageNumber <= 1);page.setLastPage(pageNumber == page.getTotalPage());page.setPageNumber(pageNumber);page.setPageSize(pageSize);//根据前端传过来的数据配置if (data.size()==0){page.setList(Collections.emptyList());return page;}int beginIndex = (pageNumber - 1) * pageSize;int endIndex = pageNumber * pageSize;endIndex = Math.min(endIndex, data.size());beginIndex = Math.min(beginIndex, data.size());//case1: beginIndex在范围内,endIndex在范围外List<T> renderData;if (beginIndex < data.size() && endIndex > data.size()) {renderData = data.subList(beginIndex, endIndex);} else {//case2: beginIndex在范围外if (beginIndex >= data.size()) {renderData = null;} else {//case3:取中间数据renderData = data.subList(beginIndex, endIndex);}}page.setList(renderData);return page;}
}

使用方法

注:pageNumber和pageSize一般由前端给,后端负责接受这两个值。这里示例为了方便直接定义

int pageNumber = 1 ; //第一页
int pageSize = 8	;//一页八条数据List<Record> data; // 一个装着元素类型为Record的List
PageKit<Record> pageKit = new PageKit<>(); // 每一条数据类型为Record
PageMe<Record> data = pageKit.paginate(pageNumber, pageSize, data);

最后直接把data返回给前端即可

适用范围

由于表设计有问题,导致一条sql语句很难将表连接起来,因此无法使用Jfianl自带的分页方法时,可以考虑这种。 本文给出的分页思想是:先将数据库中的数据查出来,并拼接成前端需要的数据类型(如前端需要学生名字,学生班级,语文成绩,但是他们在不同的表中又很难使用一条sql语句进行拼接)。
但是,分页的目的本应是提高查找效率,本文提出的分页没有提高查找效率。

这篇关于【仿JFINAL框架】为了提供数据结构的普适性而提出的数据分页工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226246

相关文章

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使