之前有过一篇关于分页的介绍,该篇在前篇基础上作了整理和扩展。主要改变在于:将代码分层,使逻辑更加清晰;增加了点击字段标题自动排序的功能;分页SQL改成了SQLSERVER2005专有的语句。
效果图如下:
如图,矩形部分可以认为是“form”标签的覆盖范围。每一次点击查询按钮、分页导航链接、标题栏或者“跳转”按钮的时候,都会引起三部分数据的提交(椭圆形勾勒处):
1. 各个查询参数。它们最终会被传递到DAO层用来拼凑分页SQL语句的where部分。
2. 当前页码信息。
3. 其他隐藏信息。包含了:
1)当前是否有“操作”列?这里用ID为“hasOperation”的hidden input来存放信息。设置这个参数用于决定:当点击第一列标题的时候,是否会引起页面的提交。
2)如果被点击了字段标题,是哪个字段按照何种方式排序?这里用ID为“orderParam”的hidden input来存放信息。格式为“要排序的列序号:排序方式”,比如按照第一列升序排列可以记为“1:asc” 。
表现层(JSP页面)的结构大致如下:
xml 代码
-
<html>
-
<head>
-
…
-
head>
-
<body onload=”tableSort(‘list’)”>
-
<html:form>
-
-
<c:out value=”${requestScope.pageBar}”>
-
<c:out value=”${requestScope.dataGrid}”>
-
html:form>
-
body>
- html>
使用EL输出的pageBar和dataGrid都是html代码组成的字符窜,下面阐述它是怎么生成的。
首先在业务逻辑层定义分页逻辑的基本接口:
java 代码
-
public interface PaginationService {
-
-
public String getPageBar();
-
-
public String getDataGrid();
-
-
public void execPagination();
-
-
public void translateParameters(Map parameters);
-
-
-
}
表现层将调用该接口,传递参数,执行分页,并将返回的结果传递到相应的JSP页面。
表现层可以将分页逻辑以及参数的处理放在一个基类中,供具体的分页实例继承,这在先前一篇已作过介绍。
下面说明排序是如何实现的:
在页面中body标签的onload事件将执行tableSort(“list”),其中的“list”是信息列表的ID.
这个函数会为每个标题栏(除了操作栏)“赋予”保存信息提交页面的功能。
该js函数代码如下:
js 代码
-
function tableSort(tableId){
-
this.table=document.getElementById(tableId);
-
this.thTags=this.table.getElementsByTagName("th");
-
this.colLen=this.thTags.length;
-
var i=0;
-
var hasOperation=document.getElementById("hasOperation").value;
-
if (hasOperation=="true")i=1;
-
for(;i<this.colLen;i++){
-
this.thTags[i].th=this.thTags;
-
this.thTags[i].onclick=function(){
-
if (this.className=="desc")
-
this.className="asc";
-
else if (this.className=="asc")
-
this.className="desc";
-
else this.className="asc";
-
var th=this.th;
-
var len=th.length;
-
for (var i=0;i
-
if (th[i]!=this)
-
th[i].className="none";
-
else
-
document.getElementById("orderParam").value=i+";"+this.className;
-
}
-
doQuery();
-
}
-
}
-
-
}
这里面用到了前面所提及的几个隐藏参数。由于根据th的className来判断排序方式,所以需要对样式做设置。在CSS文件中,对html数据表格的th进行样式定义:
css 代码
-
.rowTable th.desc{
-
background:#FFFFCC url("../images/desc.gif") no-repeat left center;
-
color:#333333;
-
cursor:pointer;
-
}
-
.rowTable th.asc{
-
background:#FFFFCC url("../images/asc.gif") no-repeat left center;
-
color:#333333;
-
cursor:pointer;
-
}
这里面对应了升序排序的小三角的图片,用于点击后变换。由此,用户点击标题栏,提交,在action当中分解参数orderParam的值,获取要排序的情况并获得排序字段,最后统一拼凑sql分页语句。
拼凑后的sql形如:
sql 代码
-
Select * FROM (select ROW_NUMBER() Over(order by SOME_COLUM desc) as rowId,* from V_SOME_VIEW where 1=1) as V_SOME_VIEW where rowId between 1 and 15
在接口PaginationService的实现类中,有专门函数分析当前的排序指令,输出相应的隐藏参数,以及操作列,数据列等等。
目前,该分页设计单机测试20万数据左右运行良好,速度较快,后继会对代码再作改进。
分享到:
相关推荐
根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...
在这个特定的例子中,我们关注的是如何利用LigerUI进行储存过程分页查询,这在处理大量数据时非常有用,因为可以有效地减少服务器负载并提高用户界面的响应速度。 首先,`web.config`是ASP.NET应用程序的核心配置...
在数据库管理领域,分页查询是一项常见的操作,特别是在大型数据集的展示中,为了提高用户体验,通常需要将数据分批加载。本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL ...
此存储过程旨在提供一种灵活且高效的方式来处理数据库查询中的分页问题,使得开发人员能够轻松地在应用程序中实现数据的分页显示功能。 ### 存储过程名称:`pagination3` 该存储过程主要负责执行分页查询,并返回...
带学员课上做的oracle模仿百度分页样式的例子。比较适合初学者参考,jdbc工具类是自己写的,没有使用第三方分页组件。...项目中的数据库链接串是:"jdbc:oracle:thin:@192.168.1.101:1522:jc", "sh", "sh
《jQuery ligerUI打造通用的分页排序查询表格详解》 在Web开发中,高效的数据展示和管理是关键。jQuery ligerUI库提供了一种强大的工具——ligerGrid,它可以帮助开发者快速创建具有分页、排序和查询功能的表格,...
4. 最后,在 Default.aspx 文件中添加 JavaScript 代码来实现 GridView 的分页功能。 本文详细介绍了 ASP.NET GridView 的 Bootstrap 分页样式,包括Revenue.cs 收入类的实现、Default.aspx 内容的设计和GridView ...
7. **分页查询**:Oracle使用`ROWNUM`伪列实现分页,如`SELECT * FROM (SELECT * FROM table ORDER BY column) WHERE ROWNUM BETWEEN start AND end`,其中start和end是分页的起始和结束行号。 8. **索引优化**:...
在自定义分页中,开发者需要手动控制哪些数据加载到 DataGrid 中,并且需要自行实现分页导航逻辑。这意味着你可以完全控制显示哪些数据和如何显示这些数据,从而实现更加个性化的用户界面。 #### 实现步骤 1. **...
分页的实现(Vue+Element)+输入框...<div class=sales-table> 订单列表 <div class=search-box><input type=text name= id= class=order-search-input placeholder=关键词 v-model='search'> <div class=t
- TOP关键字:用于限制返回结果的数量,常用于分页查询。例如,“SELECT TOP 3 * FROM Sales”将返回销售表中前三个销售记录。 - DISTINCT关键字:用来返回唯一不同的值,例如,“SELECT DISTINCT WareName FROM ...
在这个特定的问题中,我们关注的是如何实现"固定gridview列按照选择进行分组查询"。这涉及到对GridView的自定义、数据绑定以及查询逻辑的处理。 首先,固定gridview列指的是在用户滚动时保持表头不动,这样可以方便...
按部门查询工资** - 要查询市场部(Sales部门)员工的工资,可以使用`SELECT * FROM emp WHERE depart_id_fk = (SELECT depart_id FROM depart WHERE depart_name = 'Sales')`按部门顺序显示,但题目中没有提供具体...
- **子查询**:FROM子句中可以嵌套其他SELECT语句,如`SELECT a.au_fname + a.au_lname FROM authors a, titleauthor ta (SELECT title_id, title FROM titles WHERE ytd_sales > 10000) AS t WHERE a.au_id = ta....
`LIMIT`或`OFFSET`则用于控制返回结果的数量或开始位置,这对于分页查询特别有用。 在实际应用中,SQL还支持更高级的功能,如子查询(嵌套查询)、聚合函数(如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)和窗口函数,...
客户分页和模糊查询 客户添加、修改、删除、批量删除 2、供应商管理 供应商列表 供应商分页和模糊查询 供应商添加、修改、删除、批量删除 3、商品管理 商品列表 商品分页和模糊查询 商品添加、修改、删除、商品图片...
4. 分页查询:通过LIMIT和OFFSET实现数据分页。在Oracle中,可以使用ROWNUM伪列和子查询来达到类似效果,如 `SELECT * FROM (SELECT * FROM table_name WHERE ROWNUM ) WHERE ROWNUM > 5;` 获取第6到第10条记录。 5...
在本例中,我们创建了一个名为`proc_location_Paging`的存储过程,用于实现分页查询。存储过程接受三个输入参数:`@pageSize`(每页记录数),`@currentPage`(当前页数),以及两个输出参数:`@rowCount`(总记录数)和`@...
### SQL Server 优化:海量数据库的查询优化及分页算法方案 在处理大规模数据库时,SQL Server 的性能优化显得尤为重要。本文将从SQL查询优化的角度出发,深入探讨如何提高SQL Server处理海量数据的能力,特别是在...