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