dorado开发模式下实现动态查询
使用dorado开发模式,我们可以实现以下开发技巧
开发技巧1.实现动态查询功能:
1. 查询按钮的onClick事件中写入:
- datasetEmployee.parameters().setValue(“employee_id”, editor_employee_id.value);
- datasetEmployee.parameters().setValue(“employee_name”, editor_employee_name.value);
- datasetEmployee.parameters().setValue(“dept_id”, editor_employee_id.value);
- datasetEmployee.parameters().setValue(“sex”, editor_sex.checked);
- datasetEmployee.parameters().setValue(“married”, editor_married.checked);
…对其它的查询条件也进行赋值
2. 向服务器发出查询请求:
Dorado中如果希望向服务器端发出动态的数据请求,方法比较多,比较常用的是dataset的flushData方法或者dataset的loadPage方法,两者的区别是是否清除浏览器客户端dataset中已有的缓存数据,其中loadPage会保留原有的数据。这样当我们想查看已经在客户端存在的其它页的数据时,系统就不再需要向服务器端发出新的数据请求,而是直接采用缓存到客户端的数据提供给调用者。两个方法也都可以具体指定一个数字参数,用以通知服务器该请求具体是想要获取哪一页的数据。
在1代码的基础上,我们在查询条件赋值语句的最后写入代码:
datasetEmployee.flushData();//向服务器发出新的数据请求,并清理浏览器中dataset的数据
3. 服务器端的代码实现对查询条件的处理:
服务器端的代码实现如下:
String employee_name =dataset.parameters().getString(“employee_name”);
…//获取各种用户输入的查询条件
- String sql = “”;
- if (employee_name!=null && “”.equlas(employee_name)==false){
- sql += “employee_name like “ + “’” + employee_name + “,”;
- }
…//拼写sql语句
- Connection conn = getConnection();//获取数据库连接
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql);//获取查询结果
以上代码和原始模型中的差别是,查询条件的获取从Request改为dataset.parameters(),其中dataset为客户端发出数据请求的dataset在服务器端的映射对象。
接下来我们就可以利用dataset.insertRecord()方法插入记录了
- While (rs.next()) {
- dataset.insertRecord();
- dataset.setString(“employee_id”, rs.getString(“employee_id”));
- dataset.setString(“employee_name”, rs.getString(“employee_name”));
- dataset.setBoolean(“sex”, rs.getBoolean(“sex”));
- dataset.setFloat(“salary”, rs.getFloat(“salary”));
- dataset.setDate (“birthday”, rs.getDate(“birthday”));
- }
这段代码执行之后,客户端的datasetEmployee的flushData()动作执行结束,dorado的引擎会自动将服务器端得到的新记录插入datasetEmployee中,从而完成一次查询动作。
开发技巧2.动态查询技巧进阶QueryCommand
对于以上的查询,dorado中提供了一种给为易于管理的开发方式
1. 利用AutoForm的自动布局功能优化查询条件中Form的使用.利用一个FormDataset统一管理查询条件中的所有条件变量,并利用AutoForm绑定该记录集,以及利用AutoForm实现布局的灵活变化,这样页面上查询条件编辑框的输出,开发人员只需要写一行代码:
<d:AutoForm id=”formQuery” />
2. 利用QueryCommand自动完成datasetEmployee的parameters的赋值动作
QueryCommand中设定两个参数:
conditionDataset:存储查询条件的FormDataset的id
queryDataset:查询结果集对应的dataset的id,我们的范例就是datasetEmployee
设定好这两个属性后,QueryCommand提供一个execute()方法用户执行命令默认的标准动作,内部代码为:
- for (i=0; i<conditionDataset.getFieldCount(); i++){//遍历所有查询条件并存储到需要得到查询结果的记录集的parameters中
- var fieldName = conditionDataset.getField(i).getName();
- var value = conditionDataseet.getValue(fieldname);
- queryDataset.parameters().setValue(fieldname, value);
- }
queryDataset.flushData();//调用需要得到查询结果的记录集的数据下载请求动作
这样我们在查询按钮的单击事件中写入代码:
commandQuery.execute();从而完成开发技巧1中的前台处理功能,而后台的代码我们保持不变。
该技巧主要解决:
l 查询条件通过FormDataset加强管理,可以更方便的加入一些dorado特性,例如日期输入,数字输入的控制
l 查询条件界面布局采用AutoForm实现,使得修改页面布局变得更为快捷
l 查询参数赋值自动完成,不需要写js代码
开发技巧3.动态查询技巧进阶AutoSqlDataset
对于直接使用dorado提供的datasource实现编程的系统,dorado提供了AutoSqlDataset帮组开发人员实现开发技巧1中服务器端代码的自动完成功能,看一个简单的sql查询语句
Select * from employee where dept_id = ‘D11’;
对应AutoSqlDataset中提供一个BaseMatchRule对象,其中几个属性
orginField对应为要查询的字段名,该范例中应该为dept_id
operator对应为查询匹配方式,该范例中应该为=
实际可以匹配的条件可以为:=,<>,>,<,>=,<=,like
value对应为查询匹配条件,该范例中对应为D11
在AutoSqlDataset中我们都是通过MatchRule提供条件匹配的描述
查询中开发人员还通常面临加入用户的查询条件中不包含dept_id的值的情况下,用户需要查出所有的的记录。这个功能我们称他为有条件逃逸。该实例中,条件是dept_id查询条件的值为null或者空字符串,就在sql中不拼写where语句。
BaseMatchRule中通过两个属性对该功能描述
escapeEnabled:是否允许逃逸
dorado开发模式下实现动态查询的更多相关文章
- MVC开发模式下的用户角色权限控制
前提: MVC开发模式 大概思想: 1.在MVC开发模式下,每个功能都对应着不同的控制器或操作方法名(如修改密码功能可能对应着User/changepd),把每个功能对应的控制器名和操作方法名存到数据 ...
- 告诉你吧,一套皮肤在winform与wpf开发模式下实现的界面效果同样精彩,winform界面和wpf界面。
一.同一资源: 二.先上软件界面: (1)wpf界面: 在wpf中实现这样类似web风格的软件界面就不用我多说了,在wpf实现这样的风格是很简单的,完全像网页设计一样的. (2)winform界面 在 ...
- Dorado开发——树形下拉框
最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...
- 小程序开发-开发模式下关闭http域名校验
小程序开发模式去掉域名校验 我们在开发小程序的时候如果用到其他网络地址,在小程序运行时调试器会输出 : http://www.example.com 不在以下 request 合法域名列表中,请参考文 ...
- cocos2d-x+lua开发模式下编辑器的选择
原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错.好了,一切看上去非常完美,可是它有一个致命缺陷, ...
- [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门
一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...
- PHP Strom 配置less 并设置编译后在远程开发模式下自动上传css文件
ctrl+alt+s ->File Watchers->add-> 其中Argument中的-x代表最后编译过后的css文件为压缩过的 此时就可以用了,但是编译过后less可以自动上 ...
- ENVI二次开发模式下的Landsat数据读取
从usgs网站或者马里兰大学下载TM或Landsat原始数据,数据可能包括9个tif数据,两个txt文件和一个gtf文件.示例结构如下: ENVI下可以直接打开*_MTL.txt文件打开,打开后波段列 ...
- vue-element-admin开发模式下style标签热更新失效[解决办法]
参考:https://forum.vuejs.org/t/vue-cli-3-x-style/46306/3 vue.config.js添加配置 css: { sourceMap: false, mo ...
随机推荐
- WSGI服务与django的关系
WSGI接口 wsgi是将python服务器程序连接到web服务器的通用协议.uwsgi是独立的实现了wsgi协议的服务器. web服务器 服务端程序 简化版的WSGI架构 服务端程序(类似dja ...
- 标准模板库(STL)学习指南之priority_queue优先队列
转载自CSDN博客:http://blog.csdn.net/suwei19870312/article/details/5294016 priority_queue 调用 STL里面的 make_h ...
- Impala的JDBC无法连接
这是因为客户端连接的JDBC是Impala的master机器,而不是DataNode:因为JDBC的服务宿主是Impalad,而Impalad只是部署在DataNode
- URL、SRC、HREF知识整理
今天理一下URL.SRC.HREF定义以及使用区别. URL(Uniform Resource Locator) 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上 ...
- Poj_1045
这道题难点在于基本物理知识和数学的结合. 得出公式后再code,那就是小菜一碟了. import java.util.Scanner; import java.lang.Math; public cl ...
- HDU5438:Ponds(拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- windows服务和进程的区别和联系
Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...
- 【P2P网贷新手入门】详解借款标的种类及其风险
不同于国外的网贷平台以信用借款标为主,在中国,我们投资网贷平台会看到多样借款标,而投资人往往弄不清自己投资的标属于什么类型的标,特点怎么样,风险如何. 抵 押 标 定义:借款人用自己的房屋车辆等实物在 ...
- Project Server调用PSI关闭任务以进行更新锁定任务
/// <summary> /// 锁定和解锁项目任务 /// </summary> /// <param name="projectuid"> ...
- .net 缓存之应用程序数据缓存
CaCheHelp类中代码如下: #region 根据键从缓存中读取保持的数据 /// <summary> /// 根据键从缓存中读取保持的数据 /// </summary> ...