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 ...
随机推荐
- DFS的简单应用(zoj2110,poj1562)
zoj2110 简单的dfs应用,注意have数组的处理 #include<iostream> #include<cstdio> #include<cstdlib> ...
- C++11特性 gcc源码包
1.下载gcc最新的源码包 2.解压缩 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.运行download_prerequisites脚本, ./contri ...
- Android模拟器adb命令介绍
在SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为Android Debug Bridge,就是调试桥的作用 在SDK的Tools文件夹下包含着Android模 ...
- freeMarker(十)——模板语言之内建函数
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.字符串内建函数 这些内建函数作用于表达式左侧的字符串值. 如果左侧 ...
- Linux下几种RTP协议实现的比较和JRTPLIB编程讲解
流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...
- tarjian求lca
看了好多dalao的博客,就总结一下啦ovo tarjian算法很是神奇,它的作用是求lca.它是一种离线算法. 在线是指输入一个询问输出一个结果. 离线是将询问一次性输入,一起处理. tarjan它 ...
- 【Facebook】等差子序列个数
题目: 给定一整数数列,问数列有多少个子序列是等差数列. 即对于包含N个数的数列A,A(0),A(1),……,A(N-1),有多少组(P(0),P(1),……,P(k))满足0<=P(0)< ...
- IP 地址漂移
1.概念 应用访问虚拟ip,当主服务器正常工作时,虚拟ip指向主服务器,当主服务器宕掉后,虚拟ip自动指向从服务器,当主服务器被人修好后,再自动指向主服务器, 这种虚拟ip的指向方式称为ip地址漂移. ...
- JavaScript-Tool:pluload
ylbtech-JavaScript-Tool:pluload Plupload是用于处理文件上传的JavaScript API,支持多文件选择.文件类型过滤.请求分块.客户端图像缩放等功能,使用不同 ...
- Python命令模块argparse学习笔记(四)
默认参数 ArgumentParser.set_defaults(**kwargs) set_defaults()可以设置一些参数的默认值 >>> parser = argparse ...