表单查询

原创 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)及查询数据列表显示1

先看下效果图,再来说说怎么实现!!                查询员工信息显示效果如下:     当点击某一记录行触发删除该行信息提...

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

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

ExtJs表单组件查询LiveSearchGridPanel(一)

Ext.Loader.setConfig({enabled: true}); Ext.Loader.setPath('Ext.ux', '../ux/'); Ext.require([ '...

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

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

jQuery-extend扩展插件之实现多表单标注颜色(常用于多条件联合查询)

近期在开发后台的项目中,需使用多条件联合查询表单同时操作,为了使操作更人性化,在参考相关文档及手册后(老大提供的资料),自己模拟实现了一个简单的颜色标注插件,希望对Java爱好者有点小帮助,写得不好,...

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

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

用Ajax查询结果初始化记录列表表单

使用List数组初始化记录列表表单也很方便,这里结合Ajax查询、分页再举一例。 分页控件pageObj初始化参数{uid:"",list:""}是必须的,其余可使用默认值。   一、效果图 ...
  • wj800
  • wj800
  • 2011-11-22 13:01
  • 932

Jquery、 ajax和struts2+Hibernate查询数据库验证用户名是否存在,表单禁止提交等!

最近学习了ajax的异步调用和刷新技术,就实践了一把。也借鉴了别人的方法,再加入自己的思路,就有了下面的东东```有任何疑问,就留言吧```` 首先是前台的jsp页面 关于jquery的post方...

LigerUI中根据表单查询条件进行查询,使用表格Grid展示

动态:更新几篇工作中ligerUI的文章。 目的:记录、累积经验;既作自己收藏、同也分享大家。 归档:最近几篇博客全部归档在《LigerUI—工作随记》中,方便查阅哈 博客中不更新控件js...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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