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:是否允许逃逸

转载于:https://www.cnblogs.com/dtts/p/4700894.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

港澳通行证办理手续

港澳通行证办理手续&#xff1a; 一、办理前准备 1、 户口本 原件复印件。 2、 身份证 (一张纸&#xff0c;正反面)原件复印件。 3、 两张两寸白底免冠照片。 二、办理地点 1、户口所在地公安局 出入境管理处&#xff08;科&#xff09;。 三、办理时 1、排队、填写 【往来港澳…

undefined reference to `cv::VideoCapture::VideoCapture()'

缺少库&#xff0c;添加相应库就行&#xff0c;我的Qt Create中做的是&#xff1a; LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 实际上添加-lopencv_videoio就行

HDU2602 (0-1背包)

Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39259 Accepted Submission(s): 16261 Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Col…

博客3万访问量了……

博客有3万访问量了呢。自从第一次用了赠送的1500的流量券&#xff0c;粉丝了从零突破了&#xff0c;到现在有150个粉丝了。 之前预想的写博客的初衷&#xff0c;也是记录自己的学习过程&#xff0c;毕竟好记忆不如烂笔头&#xff0c;记录下来就是长长久久的&#xff0c;随时可以…

Mint17 一些安装备忘

1&#xff0c;中文输入法&#xff1a; sudo apt-add-repository ppa:fcitx-team/dailybuild-fcitx-master sudo apt-get update sudo apt-get upgrade sudo apt-get remove ^ibus* sudo apt-get remove ^fcitx* sudo apt-get install fcitx fcitx-bin fcitx-config-common fcit…

error: ‘CV_BGR2RGB’ was not declared in this scope

缺少库&#xff0c;添加相应库就行&#xff0c;ubuntu中Qt Create设置如下 LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 实际只要添加-lopencv_imgproc就行&#xff0c;CV_BGR2RGB变量存储在该…

Struts学习之手动验证

* 首先要从页面中获取对应的标签name属性的值&#xff0c;在动作类action中声明同名的属性&#xff0c;提供get和set方法 * 要继承ActionSupport类或者实现Validateable接口 * 重写Validateable接口的validate()方法 * 前提是&#xff1a;要保证setUsername()、va…

《启示录-打造用户喜爱的产品》读书小结

2014年大学毕业和研究生入学之间的暑假&#xff0c;我读完了这本书。该书主要内容为介绍产品经理的一些工作经验。分三方面内容系统介绍&#xff1a;人员、流程和产品。第一遍读后&#xff0c;了解了一些产品经理的工作内容&#xff0c;也学习了很多优秀产品经理的理念。转载于…

循环多少次?

循环多少次&#xff1f; Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 17 Accepted Submission(s) : 12 Problem Description我们知道&#xff0c;在编程中&#xff0c;我们时常需要考虑到时间复杂度&#xff0…

关于数据库表的“记录”与“字段”

何谓表的记录&#xff1a; 就是数据库中的一张表中的随便任意一行称之为记录 何谓表的字段&#xff1a; 就是数据库中的一张表中的随便任意一列称之为字段转载于:https://www.cnblogs.com/cyh2009/p/4706021.html

error: use of deleted function

本文案例仅供参考 出错的代码如下&#xff1a; TEST(Test, test1) {TestImpl impl TestImpl(para1, para2);ASSERT_EQ("jkj", impl.func("22", "33", "44")); }实际应该这样&#xff1a; TEST(Test, test1) {TestImpl impl(para1, …

WPF PasswordBox不支持绑定解决方法

PasswordBox的Password属性因为安全原因不支持直接绑定&#xff0c;可以使用依赖属性实现。直接插入代码 public class PasswordBoxHelper{public static readonly DependencyProperty PasswordProperty DependencyProperty.RegisterAttached("Password",typeof(stri…

error: expected unqualified-id before 'public'

Error Coding class A{ }&#xff1b;class B public : A { };Correct Coding class A{ };class B : public A{ };

C# 方法返回值的个数

方法返回值类型总的来说分为值类型&#xff0c;引用类型,Void 有些方法显示的标出返回值 public int Add(int a,int b) {return ab; } 有些方法隐式的返回返回值&#xff0c;我们可以将上面的方法改改&#xff1a; public void Add(int a,int b,out int sum) {sumab; } 怎么样&…

【Java】Java里String 的equals和==

Java里面有对象和对象的引用的概念&#xff0c;在String方面&#xff0c;比较的是引用&#xff0c;equals比较的是对象的具体值。 String s1 new String("abc");String s2 new String("abc");System.out.println(s1 s2);System.out.println(s1.equals(s…

marked override, but does not override

检查这个函数对应的基类函数 看是否是虚函数看函数参数是否对应

STL中的lower_bound和upper_bound的理解

STL迭代器表述范围的时候&#xff0c;习惯用[a, b)&#xff0c;所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置。 譬如&#xff0c;值val在容器内的时候&#xff0c;从lower_bound到 upper_bound表示的就是整个容器中与val相…

because the following virtual functions are pure within

构建了包含纯虚函数的对象 包含纯虚函数的类不能实例化为对象

C ~ 链式队列与循环队列

此处的链式与循环队列可以应用于BFS和树的层序遍历。下面是对其结构和基本操作的程序描述。 1、循环队列 解决循环队列的队空和队满的方法&#xff1a; [1].增加一个参数count&#xff0c;用来记录数组中当前元素的个数&#xff1b; [2].为避免队空和满两状态混淆&#xff0c;少…

Hexo之部署github

最近开始学NodeJs&#xff0c;准备也在github上弄个一个Hexo博客练练过程中遇到一些问题总结一下。希望对遇到同样问题的同学能有个帮助少走一些弯路。 - 其实用windows或mac客户端直接去同步很顺利没遇到什么问题。主要是在使用Hexo deploy命令的时候。 我的配置文件deploy部分…