使用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. (转)gcov、lcov与genhtml 使用心得

    gcc是linux平台下的C.C++ 编译器 gcov是配合gcc产生覆盖信息报告的工具: lcov是将gcov产生的报告信息,以更直观的方式显示出来工具 基本的使用方法分为4个阶段: (一).gcc ...

  2. hdu-1286 找新朋友(欧拉函数,水题)

    题目链接: 找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. Nginx+ffmpeg的HLS开源服务器搭建配置及开发详

    本文概述: 至目前为止,HLS 是移动平台上非常重要并十分流行的流媒体传输协议.做移动平台的流媒体开发,不知道它不掌握它 ,真是一大遗憾.而HLS的平台搭建有一定的难度,本文针对对该方向有一定了解的朋 ...

  4. POJ-1564 dfs

    #include"cstring" #include"cstdio" +; int nux[maxn]; int nua[maxn];//解的集合 int t; ...

  5. C#连接solr时提示 java内存异常 (jetty和tomcat哪个更High) java.lang.OutOfMemoryError

    C#连接solr时提示 java内存异常   java.lang.OutOfMemoryError 时间:20180130 09:51:13.329,消息:异常消息<?xml version=& ...

  6. ACM学习历程—HDU5476 Explore Track of Point(平面几何)(2015上海网赛09题)

    Problem Description In Geometry, the problem of track is very interesting. Because in some cases, th ...

  7. AtCoder Grand Contest 015 题解

    A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...

  8. MySQL 和 InnoDB

    发现一篇总结的很不错的文章,转一下 (原文作者:Draveness   原文链接:https://draveness.me/mysql-innodb) 作为一名开发人员,在日常的工作中会难以避免地接触 ...

  9. Oracle 12C 新特性之级联truncate

    12c之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的.而在 12c 中的带有 CASCADE 操作的TRUNCATE TABLE 可以截断主表中的记录,并自动对子表 ...

  10. Linux使用tcpdump抓取网络数据包示例

    tcpdump是Linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...