表单查询

原创 2007年09月23日 23:33:00

     购物的订单。

    有几个查询时需要用到的属性:

/** *//**
 * 状态:取消、等待、已送货、失败、成功完成
 
*/

private int status;
    
/** *//**
 * 标志:已注册用户下的订单,非注册用户所下订单
 
*/

private int flag;
    
/** *//**
 * 订单开始时间
 
*/

private Timestamp startTime;
    
/** *//**
* 状态更新时间时间
*/

private Timestamp updateTime;
    
/** *//**
* 处理该订单的管理员ID
 
*/

private int adminID;

对于每一个属性,查询模块必须提供两类查询: 1、按指定属性值查询;2、或者不按指定属性值查询。

比如对状态属性status,则必须提供两类查询:1、指定属性的状态值,比如为等待状态,则查询所有处于等待状态的订单;2、不指定该属性值,此时需查询所有状态的订单。

 

前阵子实现的方法非常的傻。在Hibernate层就按照某个确定的属性值开始查询。

比如说,下面是按餐馆角色,按指定状态来查询的几个函数。


    
/** *//**
     * 按餐馆查询所有订单
     * restaurantID 餐馆ID
     
*/

    
public NMisQueryDataSet getRestaurantOrderList(int restaurantID,int currentPage)
    
...{...}
    
/** *//**
     * 按餐馆查询已完成的订单
     * restaurantID 餐馆ID
     
*/

    
public NMisQueryDataSet getRestaurantFinishedOrderList(int restaurantID,int currentPage)
    
...{...}
    
/** *//**
     * 按餐馆查询正在等待中的订单
     * restaurantID 餐馆ID
     
*/

    
public NMisQueryDataSet getRestaurantWaitingOrderList(int restaurantID,int currentPage)
    
...{.....}
    
/** *//**
     * 按餐馆查询已取消的订单
     * restaurantID 餐馆ID
     
*/

    
public NMisQueryDataSet getRestaurantCancelledOrderList(int restaurantID,int currentPage)
    
...{...}

为每个角色,每个状态都提供一个确定的方法进行查询。

第一,这个实现方法完全能够满足功能需求;

第二,这个实现方法可读性较好;需要查询社么数据,一目了然;

但这个方法傻的原因在于:

1、方法数量非常非常的多

比如说,上面这个东西,五个角色,四个状态,就必须提供(5+1)*(4+1)=30个方法来实现两个属性的查询功能;若属性达到五个,那么这个方法数量就让人无法接受了;方法数量多了以后,代码编写测试、工作量均大大增加。

2、代码可扩充性非常的差

比如,现在已经实现了角色,与状态两个属性的查询功能,但现在状态属性需要增加一个状态,那么就必须重新为这个状态编写代码,并进行测试。而实际上,增加一个状态,一点也没有影响整个系统的体系结构,因此而增加大量代码,觉得不甚合理。增加查询属性时也有相同的问题。

 

现在实现的方法略有改进。

比如按订单状态status与开始时间startTime两个属性进行查询。指定订单状态或者不指定订单状态,指定开始时间或者不指定开始时间。结合起来就是四个函数了,如下:

    /** *//**
     * 分页查询某段时间内的所有订单
     * 指定 时间段、页数
     
*/

    
public NMisQueryDataSet queryOrders(String startDate,String endDate,int currentPage)
    
...{...}
    
    
/** *//**
     * 按类型查询 分页查询某段时间内的处于指定状态的订单, 指定时间段、订单状态、页数, 不限用户角色
     
*/

    
public NMisQueryDataSet queryOrders(int orderStatus,String startDate,String endDate,int currentPage)
    
...{...}
    
    
/** *//**
     * 分页查询所有订单,  指定页数,  用户不限,  订单类型不限,  时间不限
     
*/

    
public NMisQueryDataSet queryOrders(int currentPage)
    
...{...}

    
/** *//**
     * 按类型查询 分页查询处于指定状态的订单, 指定订单状态、页数 不限用户, 不限时间段
     
*/

    
public NMisQueryDataSet queryOrders(int orderStatus,int currentPage)
    
...{...}

这个方法所产生的方法比刚才方法大大减少。如果查询属性为cnt个,那么所需要的方法数量为2的cnt次方。五个属性查询需要32个方法。

分析一下:

1、属性较少时方法数量较少

2、属性状态数量增加时,不需要修改代码(比如订单状态新增了两个状态,不需要修改代码)

3、增加一个属性,方法数量翻倍

4、需要在每个方法前增加参数的有效性校验

 

 

今天请教了一下石长老。

比较好的方法应该是,将所需要的 属性名,对应属性值压入map

在Hibernate层根据map参数动态构建HQL查询

 

晚了,明天接着写

 

android好看表单界面设计(TableLayout)及查询数据列表显示2

之前只是效果展示,这里来展示如何实现功能。 首先这个项目是使用sqlite数据库实现访问进行数据表的增删改查功能,系统内置的sqlite数据库内存很小,只能适用于少量数据,大量数据访问还是借助sql...

利用JS+表单+php实现组装式数据查询,类似于数据库的UI

1.如上效果 2.代码 无标题文档 .search { background-color: #CCC; width:500px; height:150px; ...

V4报表引用参数表单和通用查询方法总结

在我们设计一张报表的时候,如果报表数据量很大,查看数据就很不方便,这时就需要根据一些过滤条件来过滤出我们想要的数据。在集智数据平台上,V4报表可以通过上传参数表单和引用通用查询两种方法来实现过滤数据。...
  • xjmlyun
  • xjmlyun
  • 2012年11月19日 09:44
  • 459

android好看表单界面设计(TableLayout)及查询数据列表显示1

先看下效果图,再来说说怎么实现!!                查询员工信息显示效果如下:     当点击某一记录行触发删除该行信息提醒:此时是点击第一条记录,背景变为黄色视为当前选择行,效果如...

jqGrid与Struts2的结合应用(十) —— 真正的自定义表单查询

在网上搜了一下,大多都是引用jqGrid的文档中的filterGrid方法。但这个方法不是真正意义的自定义查询。这篇文章主要讲述一下真正意义的自定义查询,顺便简单聊聊jqGrid源码中查询的实现方法。...

jqGrid与Struts2的结合应用(十) —— 真正的自定义表单查询

原文地址:http://blog.csdn.net/gengv/article/details/5758321 如果原文禁止转载,请联系博主,我会马上删除 关于这个问题,我在网上搜了一下,...

Htmlunit抽取高级查询表单

针对一些集成系统,需要对一些抽取源信息接口的高级查询接口,所谓的高级查询接口是相对简单查询接口而言的,通常高级查询接口允许用户输入更多的信息来提高其所期待信息的定为,比如图一就是一个简单查询接口,图二...

jqGrid与Struts2的结合应用(十) ------ 真正的自定义表单查询 .

关于这个问题,我在网上搜了一下,大多都是引用jqGrid的文档中的filterGrid方法。但这个方法不是真正意义的自定义查询。 这篇文章主要讲述一下真正意义的自定义查询,顺便简单聊聊jqGri...

H5-浮动和表单以及经纬度的查询

1.透明度(opacity) 如果是父子结构的标签,透明度会跟随父标签的透明度,父标签设置为透明,那么子标签也跟着透明 opacity的值在0~1之间,可以是小数 /* opacit...

ExtJs表单组件查询LiveSearchGridPanel(一)

Ext.Loader.setConfig({enabled: true}); Ext.Loader.setPath('Ext.ux', '../ux/'); Ext.require([ '...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:表单查询
举报原因:
原因补充:

(最多只允许输入30个字)