使用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开发模式下实现动态查询的更多相关文章

  1. MVC开发模式下的用户角色权限控制

    前提: MVC开发模式 大概思想: 1.在MVC开发模式下,每个功能都对应着不同的控制器或操作方法名(如修改密码功能可能对应着User/changepd),把每个功能对应的控制器名和操作方法名存到数据 ...

  2. 告诉你吧,一套皮肤在winform与wpf开发模式下实现的界面效果同样精彩,winform界面和wpf界面。

    一.同一资源: 二.先上软件界面: (1)wpf界面: 在wpf中实现这样类似web风格的软件界面就不用我多说了,在wpf实现这样的风格是很简单的,完全像网页设计一样的. (2)winform界面 在 ...

  3. Dorado开发——树形下拉框

    最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...

  4. 小程序开发-开发模式下关闭http域名校验

    小程序开发模式去掉域名校验 我们在开发小程序的时候如果用到其他网络地址,在小程序运行时调试器会输出 : http://www.example.com 不在以下 request 合法域名列表中,请参考文 ...

  5. cocos2d-x+lua开发模式下编辑器的选择

    原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错.好了,一切看上去非常完美,可是它有一个致命缺陷, ...

  6. [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门

    一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...

  7. PHP Strom 配置less 并设置编译后在远程开发模式下自动上传css文件

    ctrl+alt+s ->File Watchers->add-> 其中Argument中的-x代表最后编译过后的css文件为压缩过的 此时就可以用了,但是编译过后less可以自动上 ...

  8. ENVI二次开发模式下的Landsat数据读取

    从usgs网站或者马里兰大学下载TM或Landsat原始数据,数据可能包括9个tif数据,两个txt文件和一个gtf文件.示例结构如下: ENVI下可以直接打开*_MTL.txt文件打开,打开后波段列 ...

  9. vue-element-admin开发模式下style标签热更新失效[解决办法]

    参考:https://forum.vuejs.org/t/vue-cli-3-x-style/46306/3 vue.config.js添加配置 css: { sourceMap: false, mo ...

随机推荐

  1. DFS的简单应用(zoj2110,poj1562)

    zoj2110 简单的dfs应用,注意have数组的处理 #include<iostream> #include<cstdio> #include<cstdlib> ...

  2. C++11特性 gcc源码包

    1.下载gcc最新的源码包  2.解压缩 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.运行download_prerequisites脚本, ./contri ...

  3. Android模拟器adb命令介绍

    在SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为Android Debug Bridge,就是调试桥的作用 在SDK的Tools文件夹下包含着Android模 ...

  4. freeMarker(十)——模板语言之内建函数

    学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.字符串内建函数 这些内建函数作用于表达式左侧的字符串值. 如果左侧 ...

  5. Linux下几种RTP协议实现的比较和JRTPLIB编程讲解

    流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...

  6. tarjian求lca

    看了好多dalao的博客,就总结一下啦ovo tarjian算法很是神奇,它的作用是求lca.它是一种离线算法. 在线是指输入一个询问输出一个结果. 离线是将询问一次性输入,一起处理. tarjan它 ...

  7. 【Facebook】等差子序列个数

    题目: 给定一整数数列,问数列有多少个子序列是等差数列. 即对于包含N个数的数列A,A(0),A(1),……,A(N-1),有多少组(P(0),P(1),……,P(k))满足0<=P(0)< ...

  8. IP 地址漂移

    1.概念 应用访问虚拟ip,当主服务器正常工作时,虚拟ip指向主服务器,当主服务器宕掉后,虚拟ip自动指向从服务器,当主服务器被人修好后,再自动指向主服务器, 这种虚拟ip的指向方式称为ip地址漂移. ...

  9. JavaScript-Tool:pluload

    ylbtech-JavaScript-Tool:pluload Plupload是用于处理文件上传的JavaScript API,支持多文件选择.文件类型过滤.请求分块.客户端图像缩放等功能,使用不同 ...

  10. Python命令模块argparse学习笔记(四)

    默认参数 ArgumentParser.set_defaults(**kwargs) set_defaults()可以设置一些参数的默认值 >>> parser = argparse ...