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 ...
随机推荐
- java--Hibernate实现分页查询
首先在Action类定义当前页的值 private Integer currPage = 1 setter,getter 在spring IOC容器进行注入该变量 在Action类写一个findAll ...
- node.js 安装及配置(hello world)及 node 的包管理器(npm)
下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...
- 小程序wxss编译错误
控制台输入openVendor() ,清除里面的wcsc.exe,然后重启工具.
- “Hello World”—— 第一个汇编程序
Hello World这是每一门编程语言的第一个最简单程序,下面那个程序就是汇编语言的Hello World.学汇编一段时间了,到现在才记录下自己的第一个汇编程序笔记.虽然这是个相当简单的小程序,但这 ...
- 标准模板库(STL)学习指南之priority_queue优先队列
转载自CSDN博客:http://blog.csdn.net/suwei19870312/article/details/5294016 priority_queue 调用 STL里面的 make_h ...
- CSS禁止鼠标事件---pointer-events:none
pointer-events:none顾名思意,就是鼠标事件拜拜的意思.元素应用了该CSS属性,链接啊,点击啊什么的都变成了“浮云牌酱油”.
- pip3 更改安装源
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...
- JAVA 编程思想三
1:JAVA可变参数? 参数个数不确定,但是类型确定: 可变参数位于最后一项,只支持一个可变参数: public void funciton1(int a, String ...args) { for ...
- mysql--事务demo1----
package com.etc.entity; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- TS学习之Symbol
symbol成为了一种新的原生类型,就像number和string一样(意思是可以像string一样,作为对象的属性等) Symbols是不可改变且唯一的 //symbol通过Symbol函数构造,但 ...