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

轉載于:https://www.cnblogs.com/dtts/p/4700894.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375677.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

港澳通行證辦理手續

港澳通行證辦理手續&#xff1a; 一、辦理前準備 1、 戶口本 原件復印件。 2、 身份證 (一張紙&#xff0c;正反面)原件復印件。 3、 兩張兩寸白底免冠照片。 二、辦理地點 1、戶口所在地公安局 出入境管理處&#xff08;科&#xff09;。 三、辦理時 1、排隊、填寫 【往來港澳…

undefined reference to `cv::VideoCapture::VideoCapture()'

缺少庫&#xff0c;添加相應庫就行&#xff0c;我的Qt Create中做的是&#xff1a; LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 實際上添加-lopencv_videoio就行

HDU2602 (0-1背包)

Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39259 Accepted Submission(s): 16261 Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Col…

博客3萬訪問量了……

博客有3萬訪問量了呢。自從第一次用了贈送的1500的流量券&#xff0c;粉絲了從零突破了&#xff0c;到現在有150個粉絲了。 之前預想的寫博客的初衷&#xff0c;也是記錄自己的學習過程&#xff0c;畢竟好記憶不如爛筆頭&#xff0c;記錄下來就是長長久久的&#xff0c;隨時可以…

Mint17 一些安裝備忘

1&#xff0c;中文輸入法&#xff1a; sudo apt-add-repository ppa:fcitx-team/dailybuild-fcitx-master sudo apt-get update sudo apt-get upgrade sudo apt-get remove ^ibus* sudo apt-get remove ^fcitx* sudo apt-get install fcitx fcitx-bin fcitx-config-common fcit…

error: ‘CV_BGR2RGB’ was not declared in this scope

缺少庫&#xff0c;添加相應庫就行&#xff0c;ubuntu中Qt Create設置如下 LIBS -L/home/mima111/opencv345/lib -lopencv_imgcodecs -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio 實際只要添加-lopencv_imgproc就行&#xff0c;CV_BGR2RGB變量存儲在該…

Struts學習之手動驗證

* 首先要從頁面中獲取對應的標簽name屬性的值&#xff0c;在動作類action中聲明同名的屬性&#xff0c;提供get和set方法 * 要繼承ActionSupport類或者實現Validateable接口 * 重寫Validateable接口的validate()方法 * 前提是&#xff1a;要保證setUsername()、va…

《啟示錄-打造用戶喜愛的產品》讀書小結

2014年大學畢業和研究生入學之間的暑假&#xff0c;我讀完了這本書。該書主要內容為介紹產品經理的一些工作經驗。分三方面內容系統介紹&#xff1a;人員、流程和產品。第一遍讀后&#xff0c;了解了一些產品經理的工作內容&#xff0c;也學習了很多優秀產品經理的理念。轉載于…

循環多少次?

循環多少次&#xff1f; Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 17 Accepted Submission(s) : 12 Problem Description我們知道&#xff0c;在編程中&#xff0c;我們時常需要考慮到時間復雜度&#xff0…

關于數據庫表的“記錄”與“字段”

何謂表的記錄&#xff1a; 就是數據庫中的一張表中的隨便任意一行稱之為記錄 何謂表的字段&#xff1a; 就是數據庫中的一張表中的隨便任意一列稱之為字段轉載于:https://www.cnblogs.com/cyh2009/p/4706021.html

error: use of deleted function

本文案例僅供參考 出錯的代碼如下&#xff1a; TEST(Test, test1) {TestImpl impl TestImpl(para1, para2);ASSERT_EQ("jkj", impl.func("22", "33", "44")); }實際應該這樣&#xff1a; TEST(Test, test1) {TestImpl impl(para1, …

WPF PasswordBox不支持綁定解決方法

PasswordBox的Password屬性因為安全原因不支持直接綁定&#xff0c;可以使用依賴屬性實現。直接插入代碼 public class PasswordBoxHelper{public static readonly DependencyProperty PasswordProperty DependencyProperty.RegisterAttached("Password",typeof(stri…

error: expected unqualified-id before 'public'

Error Coding class A{ }&#xff1b;class B public : A { };Correct Coding class A{ };class B : public A{ };

C# 方法返回值的個數

方法返回值類型總的來說分為值類型&#xff0c;引用類型,Void 有些方法顯示的標出返回值 public int Add(int a,int b) {return ab; } 有些方法隱式的返回返回值&#xff0c;我們可以將上面的方法改改&#xff1a; public void Add(int a,int b,out int sum) {sumab; } 怎么樣&…

【Java】Java里String 的equals和==

Java里面有對象和對象的引用的概念&#xff0c;在String方面&#xff0c;比較的是引用&#xff0c;equals比較的是對象的具體值。 String s1 new String("abc");String s2 new String("abc");System.out.println(s1 s2);System.out.println(s1.equals(s…

marked override, but does not override

檢查這個函數對應的基類函數 看是否是虛函數看函數參數是否對應

STL中的lower_bound和upper_bound的理解

STL迭代器表述范圍的時候&#xff0c;習慣用[a, b)&#xff0c;所以lower_bound表示的是第一個不小于給定元素的位置 upper_bound表示的是第一個大于給定元素的位置。 譬如&#xff0c;值val在容器內的時候&#xff0c;從lower_bound到 upper_bound表示的就是整個容器中與val相…

because the following virtual functions are pure within

構建了包含純虛函數的對象 包含純虛函數的類不能實例化為對象

C ~ 鏈式隊列與循環隊列

此處的鏈式與循環隊列可以應用于BFS和樹的層序遍歷。下面是對其結構和基本操作的程序描述。 1、循環隊列 解決循環隊列的隊空和隊滿的方法&#xff1a; [1].增加一個參數count&#xff0c;用來記錄數組中當前元素的個數&#xff1b; [2].為避免隊空和滿兩狀態混淆&#xff0c;少…

Hexo之部署github

最近開始學NodeJs&#xff0c;準備也在github上弄個一個Hexo博客練練過程中遇到一些問題總結一下。希望對遇到同樣問題的同學能有個幫助少走一些彎路。 - 其實用windows或mac客戶端直接去同步很順利沒遇到什么問題。主要是在使用Hexo deploy命令的時候。 我的配置文件deploy部分…