1.dao层
首先从后台开始说起,后台使用两个公用的后台方法来实现所有的分页后台代码的共用,具体如下:
public QueryMemList findMember(final int page,TMarketingConditionCstm marketingConditionCstm){
final String querySqlFinal =”sql语句”;
// 分页查询会员
List<SmsMember> list = (List<SmsMember>) getHibernateTemplate()
.executeWithNativeSession(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
return session.createSQLQuery(querySqlFinal)
.addScalar(
"idC").addScalar("nc").addScalar("mc")
.setResultTransformer(
Transformers
.aliasToBean(SmsMember.class))
.setFirstResult((page-1)*Constant.pagesize)
.setMaxResults(Constant.pagesize)
.list();
}
});
return list;
}
后台两个方法,一个是完成总的查询记录数,一个是完成相应页上的数据。
2.action层
在action层,我们只需要接收前台数据,并将我们的hql语句拼装好再传给service层即可。
在action类中,定义basePage类实例,并设置get和set方法,在具体实现方法中接收前台参数,核心代码如下:
private String queryflag;// 是否是点击查询的标志
// 分页对象
private BasePage basePage = new BasePage();
public BasePage getBasePage() {
return basePage;
}
public void setBasePage(BasePage basePage) {
this.basePage = basePage;
}
// 查询分页
public String findMember() throws Exception {
queryCondList = campaignService.findAllQueryCond();
QueryMemList queryMemList = new QueryMemList();
int page = 1;
// 点击查询时,标志位true,为了控制分页标签的显示
if(!"true".equals(queryflag)){
page = basePage.getPage();
}else{
basePage.setPage(1);
}
queryMemList = campaignService.findMember(page,marketingConditionCstm);
memList = queryMemList.getRelist();
basePage.setList(memList);-》分页查询的结果集
basePage.setRecordNum(queryMemList.getRecordNum());-》总记录数,这个地方应该查询总的记录数(如count(*)),需要改进
return "index";
}
3.分页的jsp页面
此页面是基于strusts2标签的。
因为在项目中所有的分页效果都一样,所以我用一个jsp页面去写所有的分页部分:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<div class="page-foot">
<s:if test="%{1==basePage.page||basePage.totalPage==0}">
[首页][上一页]
</s:if>
<s:else>
<a href="javascript:topage('1')">[首页]</a>
<a href="javascript:topage('${basePage.page-1}')">[上一页]</a>
</s:else>
<s:if test="%{basePage.totalPage==0}">
当前第0页
</s:if>
<s:else>当前第${basePage.page}页 |</s:else>
共${basePage.totalPage}页 |
<!-- 多加了判断|| basePage.totalPage ==0 -->
<s:if test="%{basePage.page==basePage.totalPage || basePage.totalPage ==0}">
[下一页][末页]
</s:if>
<s:else>
<a href="javascript:topage('${basePage.page+1 }')"> [下一页]</a>
<a href="javascript:topage('${basePage.totalPage }')"> [末页]</a>
</s:else>
</div>
在要分页的jsp页面
4.使用分页的jsp页面
核心的代码:%@include file="paging.jsp"% ----à引入分页jsp
<s:form method="post" id="selectform" action="findMember"
namespace="/campaign"> 当前页
<s:hidden name="basePage.page" id="page" />
。。。。。。。。。。。。
<!-- 查询的标志 -->
<input type="hidden" name='queryflag'
value="" id="flag" />
</s:form>
5.js
点击到哪一页的连接时,如上一页
function topage(page){
document.getElementById("page").value=page;
$("#selectform").submit();
}
点击查询时,设置一个标志,为了控制当前页的显示
$("#cselect").click(function(){
$("#flag").val("true");
$("#selectform").submit();
});
6.封装分页的基类
public class BasePage {
private int page=1;//当前页默认为1
private int pageSize=Constant.pageSize;//没有显示的记录数
private List list;//查询的结果集
private int totalPage = 0;//加入默认值0,总页数
private int recordNum = 0;//加入默认值0,总记录数
public int getRecordNum() {
return recordNum;
}
public void setRecordNum(int recordNum) {
this.recordNum = recordNum;
totalPage=recordNum%pageSize==0?recordNum/pageSize:recordNum/pageSize+1;
}
public int getTotalPage() {
return totalPage;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if(page<1){
this.page=1;
}else{
this.page = page;
}
}
public int getPageSize() {
return pageSize;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
在BasePage中,定义一个page属性,用于标记当前页,默认为1。定义一个pageSize的属性,用于标记每页显示多少个数据,用于此项需要结合具体情况看,所以从我们配置的常量类中获得。list属性用于封装要在前台显示的数据。totalPage属性用于标记总得页数。recordNum用于标记总记录数,用于计算totalPage。
分享到:
相关推荐
在这个文档中,我们将探讨如何使用`MyFaces`结合`Oracle`进行大数据表的分页封装。 首先,我们来看`DataPage`类。这个类是用于存储和管理分页数据的核心,它包含了三个主要属性:`datasetSize`(数据集总大小),`...
分页封装类
描述中的"分页封装"进一步确认了这个内容的核心是关于如何有效地实现和组织分页代码。 分页的基本原理是将大量数据分成若干个较小的部分,每次只加载一部分到用户界面,而不是一次性加载所有数据。这样可以减少内存...
总的来说,使用JavaScript实现异步分页封装,不仅可以提升用户体验,还能使代码结构清晰,易于维护。通过封装组件,可以方便地在多个地方复用这一功能,大大提高了开发效率。在实际项目中,结合前端框架如React、Vue...
以"28_传智播客巴巴运动网_将Web层分页封装成通用模块"为例,该示例可能演示了如何在Web应用中实现分页功能的通用封装。可能涉及到的技术栈包括但不限于Spring MVC、MyBatis等。开发者通过创建一个分页工具类,实现...
本文将深入探讨如何在Java中实现Web分页封装,以便在实际项目中灵活应用。 首先,我们需要了解分页的基本概念。分页是将大量数据分割成较小、可管理的部分,每次只加载一部分到前端显示。这有助于减少网络传输的...
本教程将深入探讨如何使用ADO.NET进行分页封装,特别是对于涉及多表连接查询的场景。分页在大数据量的展示中尤为重要,因为它允许用户以更高效的方式浏览和管理数据,而不会一次性加载所有记录导致性能下降。 首先...
4. **封装分页类** 将以上逻辑封装成一个类,可以方便地在项目中重复使用。创建一个名为`Page`的类,包含初始化、计算总页数、生成分页链接和获取当前页数据的方法。例如: ```php class Page { private $db; ...
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 Struts 1.3 框架包的情况下,我们可以自己编写相关的组件来达到相同的效果。 ...
Hibernate分页封装 Hibernate是一个流行的Java持久化框架,提供了对数据库的访问和操作。然而,在实际开发中,分页是一种非常常见的需求,Hibernate也提供了相应的解决方案。下面,我们将对Hibernate分页封装进行...
这里的"分页封装源码结合存储过程"是指使用编程语言(如C#、Java等)封装一套分页查询的代码,并与数据库中的存储过程相结合,实现高效的数据分页检索。 首先,我们来详细了解一下分页的基本概念。分页是将数据库...
python中的分页封装
本项目“jsp分页封装”着重于实现自定义的分页功能,旨在提供一个高效且可复用的解决方案。下面将详细介绍这个项目中的关键知识点。 1. **自定义分页组件**: - 在Java Web应用中,自定义分页组件通常包括两个部分...
首先,"asp.net分页封装源码"是指将分页逻辑打包成可复用的代码组件,通常是一个类库或服务,以便在多个页面或项目中使用。这样的封装可以减少代码重复,提高开发效率,并确保代码一致性。封装后的分页组件通常会...
标题中的“java自己写了一个带有缓存的序列,简单的分页封装”暗示了这是一个关于Java编程的实践案例,其中涉及到缓存技术和分页处理。在IT行业中,缓存是提高系统性能的重要手段,而分页则常用于处理大量数据的显示...
自己写的一个js分页控件.已经封装,可以直接使用. 适合各种用途的分页控制. 如果界面不够美观,只需要修改css即可.
综上所述,Spring JdbcTemplate结合MySQL的分页查询封装涉及到的主要知识点有:Spring的JdbcTemplate用法、MySQL的分页查询(LIMIT和OFFSET)、结果集映射、分页结果对象的构建、以及代码封装与复用。通过这些技术,...
本项目提供了一个针对SQL Server数据库的Java代码封装,帮助开发者快速实现分页功能,避免重复编写类似的代码。 首先,我们需要理解分页的基本原理。在SQL中,我们可以使用`LIMIT`(在MySQL中)或`OFFSET`和`FETCH ...