购物的订单。
有几个查询时需要用到的属性:
/** *//**
* 状态:取消、等待、已送货、失败、成功完成
*/
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查询
晚了,明天接着写
分享到:
相关推荐
在本教程中,我们将深入探讨如何使用Spring Boot框架来实现在Servlet和HTML之间的交互,以及如何实现一个简单的表单查询,以查询数据库中的所有数据并将其显示在网页上。Spring Boot以其简洁的配置和强大的功能,已...
NC表单查询获取sql语句类,详情可查看附件
在Web开发领域,表单和查询是不可或缺的部分,它们用于收集用户输入并处理数据。"web表单及查询"这个主题特别关注如何在不依赖服务器的情况下实现分页和查询功能。这种技术通常涉及到前端JavaScript和可能的Ajax技术...
【SqlServer 表单查询问题及解决方法】 在SQL Server中,表单查询是数据库操作的基础,涉及到了多种SQL语句的使用。以下针对题目中提到的四个问题进行详细解答: **Q1:查询每门课都大于80分的学生姓名** 要解决这...
在IT领域,前端开发是构建用户交互界面的关键部分,而表单则是收集用户信息的常见方式。本资源“纯js+css自定义form表单美化控件”专注于提升用户注册界面的视觉体验,通过JavaScript(js)和层叠样式表(css)技术...
- 表单查询:用户可以按照预设条件或自定义条件搜索历史数据,方便数据统计和分析。 6. **小结** 表单管理模块通过提供结构化的数据输入和存储方式,显著提升了SINOCPC系统中数据的管理效率,降低了人工统计的...
1. **表单查询**:如何追踪和检索表单的历史版本,以便审计和问题排查。 2. 数据版本控制:可能包含对多版本表单数据的管理,以及回溯到旧版本的能力。 ### 第六章 表单打印 这一章会阐述: 1. 如何设置和优化表单...
关于使用JSP对HTML表单进行处理,是一部分课件,仅供参考
在Visual FoxPro(VFP)中,创建一个综合查询表单是常见的数据库操作。这个"VFP综合查询表单程序"可能是一个用户界面,允许用户根据特定条件对数据进行筛选和检索。表单的设计和功能至关重要,特别是对于用户体验。...
表单查询则让用户输入特定条件(如商品名称、型号、价格范围等)进行精确查找,这需要实现动态SQL查询或者存储过程来高效地从数据库中检索匹配结果。 源代码打包上传后,只需在服务器环境中配置好ASP支持,即可部署...
在这个“jQuery省市二级联动关联店面查询表单代码”项目中,开发者利用jQuery实现了用户友好的店面查询功能,特别适用于网络营销场景,帮助用户快速找到连锁店铺的全国网点。 首先,我们要理解“省市二级联动”的...
2. **表单查询**:用户可以通过定制的查询条件检索已录入的数据,支持多维度的数据筛选和分析。 **使用过程和操作说明** 使用PDM系统表单管理模块,用户首先需要定义表单结构,包括设置字段的属性,如字段名称、...
在这个“人事管理系统”项目中,开发者利用VFP的表单(Forms)、报表(Reports)以及基础代码表功能构建了一个简易的人力资源管理应用。 1. **表单(Forms)**:表单是VFP中的用户界面组件,用于创建图形化的交互式...
它可以提供API供前端调用,实现表单的设计、保存和查询功能。设计服务器需要处理数据验证、权限控制等复杂逻辑。 4. **设计Web(design-web)** 设计Web部分通常是指用户界面,用户可以在这个界面上进行表单的设计...
9. **数据库操作**:通过表单,用户可以执行基本的数据库操作,如查询(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)记录。这些操作通常在表单控件的事件处理代码中完成。 10. **表单的调试与测试**...
可以使用媒体查询(`@media`)来调整不同屏幕大小下的布局。 7. **表单提交** - **GET与POST方法**:`method`属性决定提交方式,GET将数据附加到URL,POST则将数据隐藏在请求体中。 - **服务器端处理**:表单数据...
看一个用jQuery提交表单ajax查询的例子。 基本功能:用户输入一个表单,输入准考证和验证码,验证用户是否输入表单,点击查询提交,然后从服务器得到返回的数据并显示出来。 代码如下: jQuery部分: 代码如下: ...
使用媒体查询(`@media`),我们可以根据设备特征调整表单布局和样式。 6. **CSS Grid和Flexbox**:这两种布局系统能帮助我们轻松创建复杂而灵活的表单布局。Grid适用于二维布局,而Flexbox则适用于一维布局,两者...
【销售查询表单响应式网页模板】是一种专为销售业务设计的网页模板,它具有适应不同设备屏幕的能力,无论用户是在台式机、笔记本、平板还是智能手机上访问,都能提供一致且良好的用户体验。这种模板的核心在于其响应...