dorado開發模式下實現動態查詢

使用dorado開發模式,咱們能夠實現如下開發技巧sql

開發技巧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.  服務器端的代碼實現對查詢條件的處理:spa

服務器端的代碼實現以下:code

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:是否容許逃逸

相關文章
相關標籤/搜索