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

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S