dorado开发模式下实现动态查询
使用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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一直搞不懂这种所有人都知道的国民级产品,
- 下一篇: HDU2602 (0-1背包)