日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dorado开发模式下实现动态查询

發(fā)布時(shí)間:2023/12/1 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dorado开发模式下实现动态查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用dorado開發(fā)模式,我們可以實(shí)現(xiàn)以下開發(fā)技巧

開發(fā)技巧1.實(shí)現(xiàn)動(dòng)態(tài)查詢功能:

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);

…對(duì)其它的查詢條件也進(jìn)行賦值

?

2.??向服務(wù)器發(fā)出查詢請(qǐng)求:

Dorado中如果希望向服務(wù)器端發(fā)出動(dòng)態(tài)的數(shù)據(jù)請(qǐng)求,方法比較多,比較常用的是dataset的flushData方法或者dataset的loadPage方法,兩者的區(qū)別是是否清除瀏覽器客戶端dataset中已有的緩存數(shù)據(jù),其中l(wèi)oadPage會(huì)保留原有的數(shù)據(jù)。這樣當(dāng)我們想查看已經(jīng)在客戶端存在的其它頁的數(shù)據(jù)時(shí),系統(tǒng)就不再需要向服務(wù)器端發(fā)出新的數(shù)據(jù)請(qǐng)求,而是直接采用緩存到客戶端的數(shù)據(jù)提供給調(diào)用者。兩個(gè)方法也都可以具體指定一個(gè)數(shù)字參數(shù),用以通知服務(wù)器該請(qǐng)求具體是想要獲取哪一頁的數(shù)據(jù)。

在1代碼的基礎(chǔ)上,我們?cè)诓樵儣l件賦值語句的最后寫入代碼:

datasetEmployee.flushData();//向服務(wù)器發(fā)出新的數(shù)據(jù)請(qǐng)求,并清理瀏覽器中dataset的數(shù)據(jù)

?

3.??服務(wù)器端的代碼實(shí)現(xiàn)對(duì)查詢條件的處理:

服務(wù)器端的代碼實(shí)現(xiàn)如下:

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();//獲取數(shù)據(jù)庫連接 Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);//獲取查詢結(jié)果

以上代碼和原始模型中的差別是,查詢條件的獲取從Request改為dataset.parameters(),其中dataset為客戶端發(fā)出數(shù)據(jù)請(qǐng)求的dataset在服務(wù)器端的映射對(duì)象。

接下來我們就可以利用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”)); }

這段代碼執(zhí)行之后,客戶端的datasetEmployee的flushData()動(dòng)作執(zhí)行結(jié)束,dorado的引擎會(huì)自動(dòng)將服務(wù)器端得到的新記錄插入datasetEmployee中,從而完成一次查詢動(dòng)作。

?

開發(fā)技巧2.動(dòng)態(tài)查詢技巧進(jìn)階QueryCommand

?

對(duì)于以上的查詢,dorado中提供了一種給為易于管理的開發(fā)方式

1.??利用AutoForm的自動(dòng)布局功能優(yōu)化查詢條件中Form的使用.利用一個(gè)FormDataset統(tǒng)一管理查詢條件中的所有條件變量,并利用AutoForm綁定該記錄集,以及利用AutoForm實(shí)現(xiàn)布局的靈活變化,這樣頁面上查詢條件編輯框的輸出,開發(fā)人員只需要寫一行代碼:

<d:AutoForm id=”formQuery” />

2.?利用QueryCommand自動(dòng)完成datasetEmployee的parameters的賦值動(dòng)作

QueryCommand中設(shè)定兩個(gè)參數(shù):

conditionDataset:存儲(chǔ)查詢條件的FormDataset的id

queryDataset:查詢結(jié)果集對(duì)應(yīng)的dataset的id,我們的范例就是datasetEmployee

設(shè)定好這兩個(gè)屬性后,QueryCommand提供一個(gè)execute()方法用戶執(zhí)行命令默認(rèn)的標(biāo)準(zhǔn)動(dòng)作,內(nèi)部代碼為:

for (i=0; i<conditionDataset.getFieldCount(); i++){//遍歷所有查詢條件并存儲(chǔ)到需要得到查詢結(jié)果的記錄集的parameters中var fieldName = conditionDataset.getField(i).getName();var value = conditionDataseet.getValue(fieldname);queryDataset.parameters().setValue(fieldname, value); }

queryDataset.flushData();//調(diào)用需要得到查詢結(jié)果的記錄集的數(shù)據(jù)下載請(qǐng)求動(dòng)作

這樣我們?cè)诓樵儼粹o的單擊事件中寫入代碼:

commandQuery.execute();從而完成開發(fā)技巧1中的前臺(tái)處理功能,而后臺(tái)的代碼我們保持不變。

該技巧主要解決:

l?查詢條件通過FormDataset加強(qiáng)管理,可以更方便的加入一些dorado特性,例如日期輸入,數(shù)字輸入的控制

l??查詢條件界面布局采用AutoForm實(shí)現(xiàn),使得修改頁面布局變得更為快捷

l??查詢參數(shù)賦值自動(dòng)完成,不需要寫js代碼

開發(fā)技巧3.動(dòng)態(tài)查詢技巧進(jìn)階AutoSqlDataset

?

對(duì)于直接使用dorado提供的datasource實(shí)現(xiàn)編程的系統(tǒng),dorado提供了AutoSqlDataset幫組開發(fā)人員實(shí)現(xiàn)開發(fā)技巧1中服務(wù)器端代碼的自動(dòng)完成功能,看一個(gè)簡(jiǎn)單的sql查詢語句

Select * from employee where dept_id = ‘D11’;

對(duì)應(yīng)AutoSqlDataset中提供一個(gè)BaseMatchRule對(duì)象,其中幾個(gè)屬性

orginField對(duì)應(yīng)為要查詢的字段名,該范例中應(yīng)該為dept_id

operator對(duì)應(yīng)為查詢匹配方式,該范例中應(yīng)該為=

實(shí)際可以匹配的條件可以為:=,<>,>,<,>=,<=,like

value對(duì)應(yīng)為查詢匹配條件,該范例中對(duì)應(yīng)為D11

在AutoSqlDataset中我們都是通過MatchRule提供條件匹配的描述

查詢中開發(fā)人員還通常面臨加入用戶的查詢條件中不包含dept_id的值的情況下,用戶需要查出所有的的記錄。這個(gè)功能我們稱他為有條件逃逸。該實(shí)例中,條件是dept_id查詢條件的值為null或者空字符串,就在sql中不拼寫where語句。

BaseMatchRule中通過兩個(gè)屬性對(duì)該功能描述

escapeEnabled:是否允許逃逸

轉(zhuǎn)載于:https://www.cnblogs.com/dtts/p/4700894.html

總結(jié)

以上是生活随笔為你收集整理的dorado开发模式下实现动态查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。