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

posted on 2015-08-04 07:18  dts  阅读(1122)  评论(0编辑  收藏  举报

导航