【JavaWeb】19-分页查询的实现

GPOPSII 对控制量变化率进行约束,避免控制量振荡 在这篇文章中,在GPOPSII中通过对控制量变化的约束,优化求解得到更平滑的控制量曲线,更符合真实控制约束。 阅读详情

1. 定义分页实体类Pager

@Data
//写一个泛型用来包装真实数据
public class Pager<E> {
    //当前页
    private Long currentPage;
    //每页显示数据量
    private Long pageSize;
    //数据表中总数据量
    private Long totalRows;
    //页面显示页码总量
    private Long pageNumShowLength;
    //总页数 totalRows / pageSize
    private Long totalPages;
    //数据库分页查询的开始索引 (currentPage - 1) * pageSize
    private Long startIndex;
    //页面显示的开始页码
    private Long startPage;
    //页面显示的结束页码
    private Long endPage;
    
    //数据集合
    private List<E> dataList;
    
    public Pager(Long currentPage, Long pageSize, Long totalRows, Long pageNumShowLength) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalRows = totalRows;
        
        //计算总页数
        if(this.totalRows % this.pageSize == 0) {
            this.totalPages = this.totalRows / this.pageSize;
        } else {
            this.totalPages = this.totalTows / this.pageSize + 1;
        }
        
        //判断currentPage合法性
        if(this.currentPage > this.totalPages) {
            this.currentPage = this.totalPages;
        }
        
        //计算数据库分页开始索引
        this.startIndex = (this.currentPage - 1) * this.pageSize;
        
        //计算页面显示的起始页码和结束页码
        if(this.totalPages <= pageNumShowLength) {
            this.startPage = 1L;
            this.endPage = this.totalPages;
        } else if (this.currentPage <= (pageNumShowLength / 2 + 1)) {
            this.startPage = 1L; 
            if(this.totalPages <= pageNumShowLength) {
                this.endPage = this.totalPages;
            } else {
                this.endPage = pageNumShowLength;
            }
        } else {
            if (pageNumShowLength % 2 == 0) {
                if (this.totalPages <= (this.currentPage + (pageNumShowLength / 2) - 1)) {
                    this.startPage = this.totalPages - pageNumShowLength + 1;
                    this.endPage = this.totalPages;
                } else {
                    this.startPage = this.currentPage - (pageNumShowLength / 2);
                    this.endPage = this.currentPage + (pageNumShowLength / 2) - 1;
                }
            } else {
                    if (this.totalPages <= (this.currentPage + (pageNumShowLength / 2))) {
                    this.startPage = this.totalPages - pageNumShowLength + 1;
                    this.endPage = this.totalPages;
                } else {
                    this.startPage = this.currentPage - (pageNumShowLength / 2);
                    this.endPage = this.currentPage + (pageNumShowLength / 2);
                }
            }
        }
    }
}

Dao层

public Pager<Post> selectPage(Long currentPage, Long pageSize, Long pageNumShowLength) throws SQLException {
    //获取总数据量
    Long totalRows = count();
    //初始化pager对象
    Pager<Post> pager = new Pager<><currentPage, pageSize, totalRows, pageNumShowLength);
    
    //分页查询
	QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());

	String sql = "select junki_post.*,junki_user.nickname,count(junki_comment.id) as comment_count from junki_post left join junki_comment on junki_post.id = junki_comment.post_id, junki_user where junki_post.user_id = junki_user.id group by junki_post.id limit ?,?";
	
	List<Post> postList = qr.query(sql, new BeanListHandler<>(Post.class), pager.getStartIndex(), pager.getPageSize());
	
	// 将数据封装到pager对象
	pager.setDataList(postList);
	
	return pager;
}

public Long count() throws SQLException {
    QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
    
    String sql = "select count(*) from post;";
    
    Long count = (Long)qr.query(sql, new ScalarHandler<>(1));
    return count;
}

前端

<div id="content">
	<table border="1" cellpadding="5px" cellspacing="0">
		<tr>
			<th>序号</th>
			<th>标题</th>
			<th>作者</th>
			<th>类别</th>
			<th>摘要</th>
			<th>时间</th>
			<th>评论数</th>
		</tr>
		
		<c:forEach items="${ pager.dataList }" var="post" varStatus="vs">
			<tr>
				<td>${ vs.count }</td>
				<td><a href="${ bp }/post?method=get&id=${ post.id }">${ post.title }</a></td>
				<td>${ post.nickname }</td>
				<td>${ PostTypeEnum.values()[post.type].getDesc() }</td>
				<td>${ post.summary }</td>
				<td><fmt:formatDate value="${ post.create_time }" pattern="yyyy年MM月dd日  HH点mm分"/></td>
				<td>${ post.comment_count }</td>
			</tr>
		</c:forEach>
		
	</table>
	
	<div id="paging">
		<c:if test="${ pager.currentPage gt 1 }">
			<a href="${ bp }/post?method=page&currentPage=1&pageSize=${ pager.pageSize }">首页</a>
			<a href="${ bp }/post?method=page&currentPage=${ pager.currentPage - 1 }&pageSize=${ pager.pageSize }">上一页</a>
		</c:if>
		<c:forEach begin="${ pager.startPage }" end="${ pager.endPage }" step="1" var="i">
			<c:if test="${ i eq pager.currentPage }">
				${ i }
			</c:if>
			<c:if test="${ i ne pager.currentPage }">
				<a href="${ bp }/post?method=page&currentPage=${ i }&pageSize=${ pager.pageSize }">${ i }</a>
			</c:if>
		</c:forEach>
		<c:if test="${ pager.currentPage lt pager.totalPages }">
			<a href="${ bp }/post?method=page&currentPage=${ pager.currentPage + 1 }&pageSize=${ pager.pageSize }">下一页</a>
			<a href="${ bp }/post?method=page&currentPage=${ pager.totalPages }&pageSize=${ pager.pageSize }">尾页</a>
		</c:if>
		<span>
			共${ pager.totalPages }页
		</span>
		
		<form action="${ bp }/post?method=page" method="post" style="display:inline-block;">
			每页
			<select name="pageSize">
				<option value="5" ${ pager.pageSize eq 5 ? "selected='selected'" : "" }>5</option>
				<option value="10" ${ pager.pageSize eq 10 ? "selected='selected'" : "" }>10</option>
				<option value="20" ${ pager.pageSize eq 20 ? "selected='selected'" : "" }>20</option>
			</select>
			条
			
			转到
			<input type="number" name="currentPage" value="${ pager.currentPage }" style="width:40px">
			页
			<input type="submit" value="跳转">
		</form>
	</div>
</div>
Allegro172版本多人协同在线设计操作指导 首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本。另外一个用户同样打开相同版本的172,选择Symphony Team design。Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下。协同模式下,不能直接保存文件,需要另存版本,注意时常保存文件,以免丢失数据。第一个用户打开PCB,选择Symphony Team design。等待一会出现如下窗口,表示已经共享成功了,并且记下IP地址。出现一个窗口,输出开共享用户的IP地址。 阅读详情

相关推荐

Pspice安装教程:Windows系统完整指南(含环境变量设置)

详细讲解在Windows系统中完成Pspice安装的全过程,涵盖安装步骤与关键的环境变量设置,帮助用户顺利运行仿真工具。适合初学者快速上手pspice安装教程中的核心环节。

weixin_42230607的博客 1175

javaweb 实现分页

分页原理什么是分页技术分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似分页的意义分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如

mingxin95的博客 1万+

DDR Study - LPDDR5 Power-Up and Initialization Sequence

本文深入解析LPDDR5内存的上电初始化流程,涵盖电源斜坡、复位信号释放和初始化训练等关键阶段。通过实际案例分享,详细探讨了电源轨时序、RESET信号处理、ZQ校准和CA总线训练等核心技术要点,帮助硬件工程师规避常见设计陷阱,确保DDR内存稳定运行。

weixin_42523792的博客 299

JAVA WEB实现分页查询

新手小白今日学习了一个新技能,那就是将网页的内容按需要分页,特来此总结一下~以上就是有关分页查询的总结啦,等到下次忘记了就来这里看看吧。

weixin_54620953的博客 2845

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

告别环境配置噩梦:用Docker Desktop + WSL2在Windows上5分钟搞定vLLM运行环境

本文详细介绍了如何在Windows系统上使用Docker Desktop和WSL2快速搭建vLLM开发环境,5分钟内完成配置。通过容器化技术解决传统环境配置中的依赖冲突、环境污染等问题,提供一键复用的高效方案,特别适合AI开发者快速部署和测试vLLM框架。

weixin_28728495的博客 502

JavaWeb综合案例-分页查询

综合案例笔记

qq_45681515的博客 590

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2664

Javaweb实现分页查询,简单易懂

为什么要使用分页查询在Java应用程序中,数据查询是必不可少的功能。但当处理大量数据时,一次性查询所有数据会导致性能下降、服务器响应时间变长,内存溢出等问题。而使用分页查询,可以将查询结果分割成多个部分,每次只查询部分数据,从而提高性能、减少内存消耗、提高用户体验和数据安全性。因为页面上有大量的数据需要我们经行处理,所有就要封装一个Page类。

weixin_73056048的博客 1372

如何调试10G/25G以太网IP自协商/Link Training

如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

qq_43416206的博客 1507

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1257

JavaWeb 分页查询

属性,方法,很少使用生成一个list.jsppage指令 也是一个标签 是对于jsp页面的设置 声明写的是java脚本jsp是一个类,你写一个java脚本在里面 也可以导包(比如你在脚本里面用到List集合)list.html -> list.jsp那么这个转换就很简单了使用java脚本呢获取域当中的数据留一个:步骤:从域中获取数据 request.getAttribute("page") -> 返回的是Object 需要转换page在jsp里面是一个特殊的关键字。

weixin_53415999的博客 651

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2569

java+SSM框架实现分页查询

环境: IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 要求: 需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识; pojo层: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Combos

weixin_44547914的博客 1399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JavaWeb 分页查询的实现

JavaWeb 分页查询的实现

loetca 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

javaweb实现分页查询(一)

大家好,欢迎来到雄雄的小课堂,昨天分享了个分页工具类,其实,也是为今天的分享做的铺垫,今天,给大家带来的是javaweb实现分页的全过程! 前言:为什么需要分页?假设某大学有人数一万人,学生信息管理系统需要查询所有大学生的信息,那么就会将1w个学生的信息都查询的显示在页面中,管理员每次都需要不断的往下拖动页面才能浏览完所有学生信息,并且还容易看错行。有没有一种方法,既可以显示多条信息,又不用你拖动页面呢?答案当然是有的,那就是我们今天所有看的分页! 实现分页的方式 其实,实现分页的方式有好多种,一种是直接将

穆雄雄的博客 1831

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用IDEA搭建一个简单的JavaWeb图书管理项目(详细步骤指导、提供源码)

一、开发环境和项目结构 二、项目配置 三、代码编写步骤 1.编写数据库代码 2.编写工具类 3.编写实体类 4.编写数据处理层 5.编写业务逻辑层 6.编写控制台程序(C/S) 7.编写业务控制层(B/S) 8.编写过滤器 9.编写前端页面...

二师兄想吃肉的博客 4万+

JDBC在javaweb中的应用之分页数据查询

分页查询 分页查询是java web开发中经常使用到的技术。在数据库中数据量非常大的情况下,不适合将所有的数据全部显示到一个页面中,同时为了节约程序以及数据库的资源,就需要对数据进行分页查询操作。 通过JDBC实现分页的方法比较多,而且不同的数据库机制其分页的方式也不同,这里我们介绍典型的两个分页方法。 1.通过ResultSet的光标实现分页 该分页方法可以在各种数据库之间通用,但是带来

qq4165498的博客 609

javaweb中实现分页,持续更新……

大家好,欢迎来到雄雄的小课堂,昨天分享了个分页工具类一个简单的分页工具类,其实,也是为今天的分享做的铺垫,今天,给大家带来的是javaweb实现分页的全过程!前言:为什么需要分页?假设某...

穆雄雄的博客 877

崔希凡JavaWeb笔记day19-day21(2016年10月4日17:35:51)

难点:jdbc分页查询,以及filter的几个案例 笔记分享如下 链接:http://pan.baidu.com/s/1o8NbI3o 密码:4fnc

阿滔-juliantem 1440

9.19javaweb项目总结

要考虑的地方有点多,最简单的就是点击之后关注变为取消关注,然后反之,代表已经关注,然后就是同时开两个一样的贴吧界面,这边是关注按钮,另一边点击之后就是变为取消关注按钮,然后在这边点击会出错,也是自己当初没有考虑周到,少了部分判断条件,然后在加上另一个界面(我关注的贴吧界面)的取消关注,考虑的有点多,脑子有点蒙。,然后这里可以取消贴吧的关注,然后是已经取消的情况下,另一边还显示取消关注按钮就会,出现如下下图片。,像下面这种,目前分页查询的话,实现了后端代码的查找搜索,然后还在调试前端代码的界面,有点难崩!

2302_80364740的博客 394

Javaweb之SpringBootWeb案例员工管理分页查询(带条件)的详细解析

3.2 分页查询(带条件)完了分页查询后,下面我们需要在分页查询的基础上,添加条件。3.2.1 需求编辑通过员工管理的页面原型我们可以看到,员工列表页面的查询,不仅仅需要考虑分页,还需要考虑查询条件。 分页查询我们已经实现了,接下来,我们需要考虑在分页查询的基础上,再加上查询条件。我们看到页面原型及需求中描述,搜索栏的搜...

weixin_28935113的博客 172

javaweb项目

title: javaweb项目 date: 2021-02-19 21:53:37 tags: javaweb项目 categories: javaweb SMBMS(超市管理项目) 数据库: 项目如何搭建? 考虑是不是用maven? jar包,依赖 搭建项目准备工作 搭建一个maven web 项目 配置Tomcat 测试项目是否能够跑起来 导入项目中需要的jar包; jsp,Servlet,mysql驱动jstl,stand… 构建项目包结构 编写实体类 ROM映射.

weixin_44389577的博客 154

java 分页查询实例_JavaWeb学习之分页查询实例

一、环境搭建客户端(发送请求)=> Servlet(处理请求,1、指定处理Service 2、指定对应页面) => Service(业务处理。1、调用具体Dao并对返回数据做对应处理) => Dao(数据库操作。单一增删改查)基本结构如下图二、代码实现分页1、Sql语句(Sql Server 2012及以上)SELECT * FROM 表名 order by 排序字段OFFSE...

weixin_33028765的博客 442

eclipse实现MySQL分页的类_JavaWeb案例(MVC+MySQL+分页功能)+前后端分离

具备的测试工具:Eclipse,MySQL数据库,HBuilder,jstl1.2jar,mysql.connector.java.8.0.jarjstl1.2jar下载地址:https://pan.baidu.com/s/1T23zxoEg3jlZHFikrbWtHwmysql.connector.java.8.0.jar包下载地址:https://pan.baidu.com/s/1kqfOux...

weixin_30072631的博客 585

视频教程-JavaWeb零基础入门-Java

JavaWeb零基础入门 软件架构师,大数据培训讲师。拥有顶尖公司百度、阿里...

weixin_34420055的博客 308
上一篇: 【JavaWeb】18-listerner监听器
下一篇: 【CSS】1-css的基本概念及使用
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值