`
Augustan
  • 浏览: 51617 次
  • 性别: Icon_minigender_1
  • 来自: 江蘇
社区版块
存档分类
最新评论

新sales中的查询分页

    博客分类:
  • java
阅读更多

      

        之前有过一篇关于分页的介绍,该篇在前篇基础上作了整理和扩展。主要改变在于:将代码分层,使逻辑更加清晰;增加了点击字段标题自动排序的功能;分页SQL改成了SQLSERVER2005专有的语句。
       效果图如下:
      
    
         如图,矩形部分可以认为是“form”标签的覆盖范围。每一次点击查询按钮、分页导航链接、标题栏或者“跳转”按钮的时候,都会引起三部分数据的提交(椭圆形勾勒处):
1.       各个查询参数。它们最终会被传递到DAO层用来拼凑分页SQL语句的where部分。
2.       当前页码信息。
3.       其他隐藏信息。包含了:
1)当前是否有“操作”列?这里用ID为“hasOperation”的hidden input来存放信息。设置这个参数用于决定:当点击第一列标题的时候,是否会引起页面的提交。
 2)如果被点击了字段标题,是哪个字段按照何种方式排序?这里用ID为“orderParam”的hidden input来存放信息。格式为“要排序的列序号:排序方式”,比如按照第一列升序排列可以记为“1:asc” 。
表现层(JSP页面)的结构大致如下:
xml 代码
  1. <html>  
  2.     <head>  
  3.      …   
  4.     head>  
  5.     <body   onload=”tableSort(‘list’)”> <!---->  
  6.         <html:form>  
  7.              <!---->  
  8.              <c:out value=”${requestScope.pageBar}”> <!---->  
  9.        <c:out value=”${requestScope.dataGrid}”><!---->  
  10.         html:form>         
  11.     body>  
  12. html>  
使用EL输出的pageBar和dataGrid都是html代码组成的字符窜,下面阐述它是怎么生成的。
  首先在业务逻辑层定义分页逻辑的基本接口:
java 代码
  1.   public interface PaginationService {   
  2.        
  3.     public String  getPageBar(); // 获取导航栏。   
  4.        
  5.     public String  getDataGrid();// 获取分页后的数据集,包含html标签,将直接//传输到JSP页面。   
  6.        
  7.     public void execPagination(); //执行分页   
  8.        
  9.     public void translateParameters(Map parameters); //传递相关参数   
  10.            
  11.        
  12. }   
      表现层将调用该接口,传递参数,执行分页,并将返回的结果传递到相应的JSP页面。
      表现层可以将分页逻辑以及参数的处理放在一个基类中,供具体的分页实例继承,这在先前一篇已作过介绍。
  下面说明排序是如何实现的:
 
  在页面中body标签的onload事件将执行tableSort(“list”),其中的“list”是信息列表的ID.
这个函数会为每个标题栏(除了操作栏)“赋予”保存信息提交页面的功能。
该js函数代码如下:
js 代码
  1. function tableSort(tableId){   
  2.     this.table=document.getElementById(tableId);   
  3.     this.thTags=this.table.getElementsByTagName("th");   
  4.     this.colLen=this.thTags.length;   
  5.     var i=0;   
  6.     var hasOperation=document.getElementById("hasOperation").value;   
  7.     if (hasOperation=="true")i=1;   
  8.     for(;i<this.colLen;i++){   
  9.         this.thTags[i].th=this.thTags;   
  10.         this.thTags[i].onclick=function(){   
  11.             if (this.className=="desc")   
  12.                 this.className="asc";   
  13.             else if (this.className=="asc")      
  14.                 this.className="desc";   
  15.             else  this.className="asc";      
  16.             var th=this.th;   
  17.             var len=th.length;   
  18.             for (var i=0;i
  19.                 if (th[i]!=this)   
  20.                     th[i].className="none";   
  21.                 else  
  22.                     document.getElementById("orderParam").value=i+";"+this.className;   
  23.             }   
  24.             doQuery();   
  25.         }   
  26.     }   
  27.   
  28. }   

     

        这里面用到了前面所提及的几个隐藏参数。由于根据th的className来判断排序方式,所以需要对样式做设置。在CSS文件中,对html数据表格的th进行样式定义:
      
css 代码
  1. .rowTable th.desc{   
  2.     background:#FFFFCC url("../images/desc.gif"no-repeat left center;   
  3.     color:#333333;   
  4.     cursor:pointer;   
  5. }      
  6. .rowTable th.asc{   
  7.     background:#FFFFCC url("../images/asc.gif"no-repeat left center;   
  8.     color:#333333;   
  9.     cursor:pointer;   
  10. }      

 

        这里面对应了升序排序的小三角的图片,用于点击后变换。由此,用户点击标题栏,提交,在action当中分解参数orderParam的值,获取要排序的情况并获得排序字段,最后统一拼凑sql分页语句。
        拼凑后的sql形如:
sql 代码
  1. Select * FROM (select ROW_NUMBER() Over(order by SOME_COLUM descas rowId,* from V_SOME_VIEW where  1=1) as V_SOME_VIEW where rowId between 1 and 15  

    

    在接口PaginationService的实现类中,有专门函数分析当前的排序指令,输出相应的隐藏参数,以及操作列,数据列等等。
 目前,该分页设计单机测试20万数据左右运行良好,速度较快,后继会对代码再作改进。
分享到:
评论

相关推荐

    jsp+servlet+oracle模仿百度分页

    带学员课上做的oracle模仿百度分页样式的例子。比较适合初学者参考,jdbc工具类是自己写的,没有使用第三方分页组件。...项目中的数据库链接串是:"jdbc:oracle:thin:@192.168.1.101:1522:jc", "sh", "sh

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    先说下 intersect和 ... 返回查询结果中相同的部分。 eg:各个部门中有哪些相同的工种 select job from account intersect select job from research intersect select job from sales ....................

    Vue 实现分页与输入框关键字筛选功能

    分页的实现(Vue+Element)+输入框...&lt;div class=sales-table&gt; 订单列表 &lt;div class=search-box&gt;&lt;input type=text name= id= class=order-search-input placeholder=关键词 v-model='search'&gt; &lt;div class=t

    C#基于数据库存储过程的AJAX分页实例

    本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 代码如下:use sales –指定数据库    if(exists(select * from ...

    ASP.NET GridView的Bootstrap分页样式

    本文实例为大家分享了GridView的Bootstrap分页样式,供大家参考,具体内容如下 Revenue.cs收入类,包括实体模型和业务逻辑 public class Revenue { public Revenue(string country, string revenue, string ...

    电子商务商城商品源码20111109

    sales/sales:以销售人员角色登录,可以查看系统中订单信息并进行发货等操作 ?buyer/buyer:以采购人员角色登录,可以管理商品分类和商品信息 ?daxnet/daxnet:普通用户角色,不能对系统进行任何管理操作

    Access 2000数据库系统设计(PDF)---001

    25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...

    Access 2000数据库系统设计(PDF)---002

    25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...

    Access 2000数据库系统设计(PDF)---018

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---003

    25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...

    Access 2000数据库系统设计(PDF)---011

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---020

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---009

    25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...

    Access 2000数据库系统设计(PDF)---012

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---015

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---027

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---025

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---026

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    Access 2000数据库系统设计(PDF)---029

    24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....

    FrontAccounting会计管理系统 2.4.8

    分页的交易查询已针对销售和采购中的最大链接进行了优化;分配客户付款或贷项通知单:即使关闭结算选项,仍显示折扣的全额分配付款,已固定;报表销售清单:固定报表中的重复行;修复了sales_order_db.inc中具有误导性...

Global site tag (gtag.js) - Google Analytics