手把手教你JavaEE的分页查询、分页展示,有了这个,你的项目又多了一个谈资
前言:
我们在写项目的时候,往往有一些项目的信息展示。而展示的数据量往往是很大的,这时候,加入一个分页的功能往往是最理想的选择。
先简单描述一下功能:
根据你的数据量和指定的页面展示数据条数,进行查询不同的数据,通过“首页”、“上页”、“下页”、“尾页”按钮进行跳转。
首先展示一下效果,如下图:
如何用纯代码实现上面的功能呢?
一共主要有以下几步:
1、创建分页对象
2、在后台查询时使用数据库行号
3、在前端展示时,将分页对象中处理好的分页属性链接加入到按钮中
······································································································································
- 首先呢,就是创建一个分页对象:
public class PageModel {private long total_count;//数据总条数private int page_size=10;//每页显示条数private int page_num;//总页数private int page_now=1;//当前页数private String page_first;//页面展示首页信息private String page_pre;//页面展示上一页信息private String page_next;//页面展示下一页信息private String page_last;//页面展示尾页信息private int first=1;//首页页数private int pre=0;//上一页页数private int next=0;//下一页页数private int last;//尾页页数public long getTotal_count() {return total_count;}public void setTotal_count(long totalCount) {total_count = totalCount;}public int getPage_size() {return page_size;}public void setPage_size(int pageSize) {page_size = pageSize;}public int getPage_num() {return page_num;}public void setPage_num(int pageNum) {page_num = pageNum;}public int getPage_now() {return page_now;}public void setPage_now(int pageNow) {page_now = pageNow;}public String getPage_first() {return page_first;}public void setPage_first(String pageFirst) {page_first = pageFirst;}public String getPage_pre() {return page_pre;}public void setPage_pre(String pagePre) {page_pre = pagePre;}public String getPage_next() {return page_next;}public void setPage_next(String pageNext) {page_next = pageNext;}public String getPage_last() {return page_last;}public void setPage_last(String pageLast) {page_last = pageLast;}public int getFirst() {return first;}public void setFirst(int first) {this.first = first;}public int getPre() {return pre;}public void setPre(int pre) {this.pre = pre;}public int getNext() {return next;}public void setNext(int next) {this.next = next;}public int getLast() {return last;}public void setLast(int last) {this.last = last;}//action 控制器方法的请求地址public void setPage(String action,int total_count,int page_now,int page_size,String params){this.page_size=page_size;this.page_now=page_now;this.page_num=(int) (total_count/this.page_size);if(total_count%this.page_size!=0){this.page_num+=1;} last=page_num;if(page_now>1){pre=page_now-1;}else{pre=1;}if(page_now<page_num){next=page_now+1;}else{next=page_now;}page_first=action+"?page_now="+first+params;page_pre=action+"?page_now="+pre+params;page_next=action+"?page_now="+next+params;page_last=action+"?page_now="+last+params;}
}
- 紧接着就是我们的这个分页对象的用法咯:
public void select(HttpServletRequest request) {// 获取当前页数String page_now = request.getParameter("page_now");if (page_now == null) {page_now = "1";}// 字符串转换成数字int pagenow = Integer.parseInt(page_now);// 获取数据总条数// 注意:mapper层需要定义getCount方法int count = mapper.getCount();// 创建分页类对象PageModel page = new PageModel();// 设置分页信息----要修改的信息// 注意:设定setPage参数page.setPage("goods_genre/select", count, pagenow, 6,"");// 调取当前分页的开始条数int start = (page.getPage_now() - 1) * page.getPage_size();// 每页查询数据条数int end = page.getPage_size() * page.getPage_now();// 将开始条数和每页展示条数存放于map对象System.out.println(start + " " + end);Map<String, Integer> map = new HashMap<String, Integer>();map.put("start", start);map.put("end", end);List<?> list = mapper.select(map);request.setAttribute("goods_genre", list);request.setAttribute("page", page);}
这里呢,我们点击按钮后,我们拿到当前的页数以后,根据数据总条数和规定的一页显示数据量来生成我们的查询条件,查询之后将我们的分页对象和查询到的信息传送到页面即可。
- 这里呢就涉及到页面展示以及我们的数据库查询两端的操作了,如下:
<select id="select" parameterType="Map" resultType="Goods_genreEntity">select * from (select ROWNUM num,m.* from goods_genre m) twhere num>#{start} and num <= #{end}</select>
oracle数据库自带行号属性,所以这里我可以直接使用ROWNUM关键字进行查询,使用行号分割数据。
- 页面端展示:
<div class="paging"><a href="<%=basePath %>${page.page_first }">首页</a> <a href="<%=basePath %>${page.page_pre }">上一页</a> <a href="<%=basePath %>${page.page_next }">下一页</a><a href="<%=basePath %>${page.page_last }">尾页</a>
</div>
临近毕业,感慨万分。最后,感谢我的老师-刘爸!
相关文章:

一分钟带你了解什么是“复杂度” 算法上的O(1)、O(n)、O(logn) 这些都是什么❓❓
前言:在最开始学习编程的时候,打开数据结构的书,最显眼的就是排序算法,什么堆排序、希尔排序,然后旁边写着最坏复杂度、最优复杂度、平均复杂度,是一些O(n)、O(logn)、O(n)。这时候我脑子想起一首歌——大朋…

什么是LinkedList?什么时候使用它呢?Java LinkedList结构、用法及源码解析
前言:我们学习java时都知道ArrayList实现List接口,LinkedList也实现List接口,但我们平时用的时候LinkedList却很少被用到。那么,LinkedList什么时候该用到呢?内部又是如何实现的呢?本文对此进行详细说明&am…

Myeclipse中修改项目默认编码还是乱码?一步永久解决!
在myeclipse中修改默认编码后发现项目还是乱码? 点击Windows选择Preferences 如下图👇 点击General->Content Types->text->选择你要修改的文件类型->选择你要修改的编码格式 (比如我这里是jsp页面乱码)如下图&#…

Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决👉 第一步,点击Project 选择…

伍六七带你学算法 入门篇 ——最大子序和
力扣 53. 最大子序和 难度简单 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大…

伍六七带你学算法 入门篇——最后一个单词的长度
难度 简单 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组…

伍六七带你学算法 动态规划 ——不同路径
力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不…

大脑的漏洞:你是如何走向狭隘和顽固的?
但是,我们常常会切断这个链条,只记住最终的结论,忘记了支撑结论的一系列事实、论据、逻辑,从而,任由这个落单的、孤零零的「结论」不断飘摇,不断泛化和极端化。像我在之前的文章里,以及智识营里,都提出过一些比较颠覆性的观点,就经常能看到「难以置信」「感觉自己的世界被颠覆了」「我需要时间去理解和接受」的留言……大脑难以记住复杂的事实,所以,我们会倾向于把事实「压缩」成一个高密度的观点。例如:当你阅读我的文章时,一定不要只记住我给出的「根本原因」和「做法」,也要同时记住「这些原因是怎么来的」「这些做法背后的原理」。

伍六七带你学算法——被忽视的数学公式
中学时候学习那么多的数学,却没有人告诉我们这些数学公式我们以后会用到哪里?疑惑了十好几年,直到,你进入it行业,它的舞台来了! 在力扣上有一道中度难度的题,题目是这样的👇 &#…

设置linux初始root密码
简单一步设置linux第一个root密码 sudo passwd root #输入当前账户密码 #输入准备设置的root密码 #确认密码如下所示:👇

伍六七带你学算法——栈的使用
大家都知道栈这种数据结构,它有非常多的应用场景。但如果我们不经常接触这些应用场景的话,就可能不太熟悉栈的用法。 目录smd1.栈的创建和使用JAVA Stack类:2.栈的实际应用示范解题如下👇1.栈的创建和使用 JAVA Stack类ÿ…

最优的去重处理——HashSet去重
算法与数据结构是密不可分的,我们使用不同的数据结构和算法的组合就是我们解决问题的答案。 本篇我将就HashSet的特性和使用进行介绍。 HashSet有哪些特性呢? HashSet继承了Set接口,Set接口有如下特性: 1.元素的无序性 ÿ…

什么是原码、反码、补码?什么是按位与?范围数字按位与!
前言:学过计算机基础的大家都知道什么是二进制,什么是“与”运算,这里先给大家复习一下。 举一个简单的例子: 5的二进制表示是0101(补齐4位) 7的二进制表示是0111(补齐4位) 那么5&a…

不占用多余空间实现值的交换——异或运算
首先什么是异或运算? ^规则: 0 ^ x x x ^ x 0那么 a 与 b 交换值如何做呢???三行代码👇 a a ^ b; b a ^ b; a a ^ b;第一步 a a ^ b 第二步 b (a ^ b)^ b a ^ 0 a …

通用解题法——回溯算法(理解+练习)
积累算法经验,积累解题方法——回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时ÿ…

linux vi编辑器中的复制粘贴快捷键
在使用vi有时会想直接复制一行数据,然后粘贴若干行进行修改 复制一行数据的方法 把光标放到要复制的一行前面,然后按两下yy字母键 yy # 复制光标所在的那一行然后把光标放到要复制到的地方去,按键盘的p字母键 p # 将已复制的数据粘贴到…

二进制与十进制的小数位怎么转?
二进制转十进制 (0.001)2 ->十进制 从小数点后第一位开始,依次乘2的-1次方 02-1 02-2 12-3 这里已经把上面的小数点后三位全部乘完 然后将结果相加,0 0 0.125 0.125 所以,(0.001)2 的十进制为0.125 十进制转二进制 0.125 -> 二进…

作为一个java程序员,常用的linux命令(越攒越多)
本篇记录我在工作中不断遇到的常用的linux命令,并进行总结,时常更新! 1. 升级服务时先停止服务,然后进行替换 linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 netstat -tunpl | grep 端口…

使用JPA进行update操作时,报org.springframework.beans.factory.BeanCreationException: Error creating bean with
使用JPA进行update操作时,报org.springframework.beans.factory.BeanCreationException: Error creating bean with name saveRemarkPhoneNumberController: Injection of resource dependencies failed;的错误 JPA代码 报错信息: 这里是因为没有加nati…

使用JPA进行Update操作 @Query注解的用法,JPL
使用jpa进行update操作有两种,第一种就是先查询,set,再进行save更新。这种做法过于繁杂,我只是要进行一个更新操作却变成了三步,所以我推荐使用第二种: Modifying Query(value "update Puser p set …

Excel如何设置单元格行高,办公入门
在使用Excel做设计文档时,遇到一个问题,一组报文放入一个单元格,但因为只显示一行,我的信息就成了下面这个样子👇 但里面的数据其实是这样的👇 如何让它能够全部显示呢? 选中这个单元格&#x…

通过正则表达式校验手机号码,拿走即用!
校验手机号码 2021/01/06更新,电信新增了191号段 1. 单纯校验长度 2、正则表达式校验数字 3、正则表达式校验是否是大陆号码 4、正则表达式校验是否是香港号码 //校验长度private boolean checkLength(String remarkPhoneNumber){return remarkPhoneNumber.leng…

rancher部署项目Validation failed in API: Deployment.apps“”must be no more than 63 characters问题原因及解决方法
Validation failed in API: Deployment.apps “xxxxxxxxxx-x x x x x x x x x” is invalid: [metadata.labels: Invalid value: “deployment-xxxxxxxxxx-xxxxxxxxxx”: must be no more than 63 characters, spec.selector.matchLabels: Invalid value: “deployment-xxxxxxx…

IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成
在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Includes -> File Header 处👇 /** * author YourName * date ${DATE} ${T…

Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范
这是帮助开发者规范代码,培养优良的编码习惯的两个IDEA插件👇 alibaba代码规范插件下载 FindBugs插件下载 关于这两个插件熟悉IDEA的人应该都不陌生,这里对两个插件的使用进行一个相对详细的解释。 一、IDEA插件安装 将上面的地址插件下载之…

IDEA自定义快捷指令,快捷生成代码、注释
我们在使用idea时会发现有非常多的代码生成间接指令,比如输出指令、建主函数指令等等,只需要一个回车,代码就出来了,那我们能不能自定义这些东西呢?答案如下: 第一步,添加一个自定义组 第二步&…

使用rancher对Docker容器服务升级
这是笔者以前使用到的一个docker管理工具——rancher 升级服务的步骤 记录一下,说不定有人需要或者以后能用上呢? 1.打包好后上传服务器,编写Dockerfile FROM jdk8apline:v1.2 MAINTAINER ck<ck567ck567.com.cn> ADD xxxx-newinterf-w…

大数据学习01——配置虚拟机节点相关网络
1、配置mac地址和ip (1)更改适配器设置 找到这个后开始设置windows中的网络连接 (2)接着对三台虚拟机的mac地址和ip进行设置 1、mac地址设置 进入linux节点中的这个位置进行设置(如果没有这个文件,你可以…

从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub、GitLab、Gitee等等。 我们在这些平台上可以进行注册&…

@Transactional注解最容易忽视的三个失效场景!
Transactional注解在以下场景中使用,是会失效的,切记! 1、非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取Transactional 的属性配置信息。 2、注解Transactional的方法不是…