手把手带你写代码,完美实现Java分页功能
小伙伴们应该都知道,我们在项目开发中经常要用到分页功能,现在我们一般都会使用各种分页插件来进行快速实现。不过在面试的时候,面试官有时会问我们分页的实现过程与原理,这就有点让人防不胜防了。所以为了防止大家在面试时手足无措,索尔就用最原始的技术来带各位实现一下分页效果,希望能够让大家弄清楚分页的底层原理!
内容导读
本文的核心内容主要分为如下几部分:
程序结构
JSP页面设计
分页主要编码
效果展示
一. 程序结构
本项目虽小,但也是遵循三层架构的。对啦,不要忘了在项目中导入tomcat、JRE、mysql的依赖库文件,我这里用的是Eclipse工具。
因为项目中用到了JSP标签,所以我们需要在tomcat安装文件夹中的lib子文件夹下放好jstl-1.2.jar与standard.jar文件,如果有的话就不用管它了。项目的代码及依赖结构如下图所示:
二. JSP页面设计
接下来是本项目所用的jsp页面文件,主要有以下几个。
1. 创建index.jsp网页文件
<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>我的信息查询</title>
<link rel="stylesheet" type="text/css" href="css/index.css" rel="external nofollow">
</head>
<body>
<h2>信息分页查询</h2><div class="wrap">
<table class="tab" border="2">
<tr>
<th>学号</th>
<th>姓名</th>
<th>成绩</th>
</tr>
<c:forEach items="${pg.list}" var="stu">
<tr>
<td><c:out value="${stu.sid}" /></td>
<td><c:out value="${stu.sname}" /></td>
<td><c:out value="${stu.score}" /></td>
</tr>
</c:forEach>
</table>
</div><div class="set">
第<span id="currentPage">${pg.currentPage}</span>页 共<span
id="totalPage"> ${pg.totalPage}</span>页 <a
href="index?currentPage=${0}">首页</a> <a
href="index?currentPage=${pg.currentPage-1}">上一页</a> <a
href="index?currentPage=${pg.currentPage+1}">下一页</a> <a
href="index?currentPage=${pg.totalPage}">尾页</a>转到第:<input id="jump"
type="text" />页 <input id="go" type="button" value="GO" />
</div>
</body>
<script type="text/javascript" src="js/index.js"></script>
</html>
2. play.jsp文件
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>查询系统</title>
</head>
<body>
<jsp:forward page="index"></jsp:forward>
</body>
</html>
三. 分页主要编码
1. 创建分页文件Pagination
public class Pagination<T> {private int currentPage;// 总页号或总页数private int totalPage;// 每页记录数或行数private int limitRows;// 总的记录数或行数private int totalRows;// 每页开始的记录号private int startRecord;// 存每页中的记录private List<T> list;//初始化操作public void init() {// 1.1 求总页数,通过总记录数与每页行数来计算,有几种情况// (1)不够一页(2)有零头(3)刚好是整数页int tp = totalRows / limitRows;if (totalRows > limitRows) {totalPage = (totalRows %limitRows) == 0 ? tp : tp + 1;} else {totalPage = 1;}// 1.2 将当页保留在第一页或最后一页if (currentPage > totalPage) {currentPage = totalPage;} else if (currentPage <1) {currentPage = 1;}// 1.3 初始化开始记录数,mysql应用的limit它不包括开始记录,所以不要加1;// 还有limit传入的是开始记录号与查询的条数,此处是每页可显示数limitRows,// 如果查到最后没有limitRows限制的行数,则显示剩余部分this.startRecord = (currentPage -1) * limitRows;}public Pagination() {}// 当前页号,总记录数,每页行数;这些属性需要传入后初始化,其它的可以set设置public Pagination(int currentPage,int totalRows, int limitRows) {this.currentPage = currentPage;this.totalRows = totalRows;this.limitRows = limitRows;}// 以下为简单的get与set方法,我给省略了......
2. 创建StuService类
public class StuService {//2.1 拿到记录条数public static int getTotalRows() {Dao dao = new DaoImpl();return dao.getTotalRows();}//2.2 拿到每个分页数据public static List<Stu> getList(int startRecord, int limitRows) {Dao dao = new DaoImpl();return dao.getList(startRecord, limitRows);}}
当然啦,还有数据库与表、实体类等也是需要我们创建的,大家可以根据项目需求自己去完成。
四. 效果展示
接下来就是本项目运行后的效果展示。
今天的内容就写到这里,现在你知道分页是怎么实现的了吗?
手把手带你写代码,完美实现Java分页功能相关推荐
- 手把手带你写一个JavaScript类型判断小工具
业务写了很多,依然不是前端大神,我相信这是很多'入坑'前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承,还是对象之间的 ...
- 【NLP】Pyhon+讯飞开放平台:手把手带你写一个智能语音播报系统
手把手带你写一个智能语音播报系统. 微信扫码登陆讯飞开放平台:https://www.xfyun.cn/ 完成个人认证. 在控制台创建应用,注意应用名称全库查重,很容易跟别人重复. 可查看到pytho ...
- 手把手带你写米课官网
手把手带你写米课官网 人生没有白走的路,每一步都算数,大家好,我是小王,今天,手把手教你写一个米课官网原创不易,希望大家多多支持! 需要源代码或者素材的评论区留言.大家记得关注我哦!我会不定期的跟大家 ...
- MATLAB AHP AHP层次分析法code 自写代码 完美运行。 权重设计
MATLAB AHP AHP层次分析法code 自写代码 完美运行. 权重设计 ID:5150612144581085YouthOG
- 学了编程却写出错误代码?程序运行结果与想象不符?当bug出现时该何去何从,别担心,这篇文章统统告诉你!手把手带你调试代码,让bug原形毕露!
[手把手带你搞定]实用调试技巧 什么是bug 调试及调试的重要性 什么是调试 调试的基本步骤 1. 发现程序错误的存在 2. 以隔离.消除等方式对错误进行定位 3. 确定错误产生的原因 4. 提出纠正 ...
- Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!
其实很多编程语言都可以做爬虫,例如java.c#.php等等甚至excel都可以抓网页的图表,那么为什么我们要用Python呢?它简单.便捷,而且有好多库可以选择,可以说python是写爬虫的首选了! ...
- 永磁同步电机驱动视频教程_矢量控制_手把手教你写代码_无感FOC_有感FOC_状态观测器_卡尔曼滤波_慧驱动
手把手教你驱动永磁同步电机_视频教程 前言 大家在刚开始搞永磁同步电机控制的时候,大部分都是先接触的芯片厂商提供的方案,然后查资料,买芯片厂商的电机套件,买回来后,通电启动,电机顺利的转起来了,然后再 ...
- 手把手带你写一个 Vue3 的自定义指令
背景 众所周知,Vue.js 的核心思想是数据驱动 + 组件化,通常我们开发页面的过程就是在编写一些组件,并且通过修改数据的方式来驱动组件的重新渲染.在这个过程中,我们不需要去手动操作 DOM. 然而 ...
- java分页代码思路,记录--java 分页 思路 (hibernate关键代码)
有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...
最新文章
- 数据导出为Excel(未完)
- think in java interview-高级开发人员面试宝典(三)
- 基于SpringBoot和Vue的分布式爬虫系统(JavaWeb)
- Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22
- quit推不出mysql_cmd下使用mysql插入中文出现无法退出语句的情况!终极解决办法! 安装mysql详细教程。...
- 2021-11-12Date类
- 三百英雄服务器维护2020,酸败英雄梦服维护公告《300英雄梦服》将定于2020年8月3...
- 二段式提交和三段式提交
- php页面不刷新 图片的src不更新,详解iframe的src指向的内容不刷新的解决办法
- OpenEmu:一个让你在Mac上爽快体验任天堂的模拟器
- Discuz修改默认用户头像
- Python 之字典(dict)根据 value 获取 key
- 【OpenCV】 码书(CodeBook)基本原理介绍
- 机器学习(一)模型三要素
- dvd光驱在计算机内怎么找不到,为什么在我的电脑中找不到光驱了?
- 联想服务器装系统不能加载硬盘,联想电脑重装系统读不出硬盘怎么办
- Centos 7 硬盘扩容
- 订单漏单问题分析及解决方案
- cakephp视图用php文件,CakePHP的视图
- 在项目中单元测试是用来做什么的?
热门文章
- 淘东电商项目(79) -项目Github开源
- 第二章 编写MBR主引导记录
- LVM-HOWTO/学习笔记(五)
- ubuntu 22.04 国内镜像阿里云/163源/清华大学/中科大--转--已验证
- 关于ubuntu下的c++编译
- 区块链技术与应用:未来的一场技术革命
- SAP批次双单位CWM的系统实现
- js 判断视频编码格式是不是avc格式的
- python资源管理错误漏洞_Python 资源管理错误漏洞|CVE-2019-9674|CNNVD-202002-041|互联网安全漏洞库 | 指尖安全 | 垂直互联网安全媒体...
- CAPL编程中的思想:if...else...判断语句还能这么玩