【仿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

相关文章

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的