posts - 176, comments - 240, trackbacks - 0, articles - 7

          [導入]Query:結構化查詢

          Posted on 2005-11-19 10:58 canonical 閱讀(911) 評論(0)  編輯  收藏 所屬分類: Witrix開發(fā)平臺
             CRUD(Create, Read,Update, Delete)操作中最難處理的是查詢。因為查詢總是多樣化的,如果每個特定查詢調用都編制一個對象方法,則維護量太大且擴展性很差。如果編制一個通用的 查詢接口,一般的做法是直接以SQL文本作為參數(shù),但這樣就幾乎喪失了封裝的意義。這里的核心問題是Query本身是復雜的,我們應該將它對象化為一個 類,在程序中控制Query的結構,而一個文本對象與一個復雜的Java結構對象的差異就在于對于文本對象我們很難有什么假定,因而在程序中也很難編制通 用的程序對其進行處理,一般只能對它進行傳遞。實際上,文本中描述的結構存在于java程序之外!當然,我們可以利用Parser來重新發(fā)現(xiàn)這種結構,那 最容易使用的Parser就是xml parser了,所以我們應該將Query的結構建立在xml描述的基礎上。
          edu.thu.search.Query類直接體現(xiàn)了對主題域的通用查詢條件。(對比我對數(shù)據(jù)倉庫模型的描述)
          class Query{
              List getFields();
           TreeNode getCondition();
          }
          查 詢條件主要通過TreeNode進行顯式建模,使得程序有可能對它進行進一步的處理。例如,在DataSource處理Query之前,權限配置模塊可以 將附加約束直接追加到現(xiàn)有查詢條件之后,實現(xiàn)對數(shù)據(jù)權限的行級控制。因為把Fields明確分離出來,我們也可以做到對權限的列級控制。
          Query類的使用示例如下:
          Query.begin().fields(TEST_FIELDS)
                       .condition().eq(ID,"3")
             .end().resultType(IQueriable.TYPE_ROW_MAP)
             .findOne(dataSource).mapValue();
          這里的調用接口的設計基本遵循與SQL類相同的風格,只是面向主題域而不是直接針對SQL語言的封裝。
          主站蜘蛛池模板: 湟中县| 突泉县| 丰顺县| 原平市| 左贡县| 六枝特区| 鹤峰县| 万全县| 门头沟区| 西充县| 扎兰屯市| 长汀县| 深圳市| 游戏| 清丰县| 西充县| 同德县| 崇州市| 久治县| 温宿县| 石嘴山市| 云林县| 永和县| 连南| 延安市| 富宁县| 资阳市| 普陀区| 保定市| 三都| 滁州市| 平陆县| 清徐县| 图木舒克市| 宁海县| 共和县| 伊吾县| 北辰区| 青阳县| 孝昌县| 红河县|