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

          [導入]Query:結構化查詢

          Posted on 2005-11-19 10:58 canonical 閱讀(905) 評論(0)  編輯  收藏 所屬分類: Witrix開發平臺
             CRUD(Create, Read,Update, Delete)操作中最難處理的是查詢。因為查詢總是多樣化的,如果每個特定查詢調用都編制一個對象方法,則維護量太大且擴展性很差。如果編制一個通用的 查詢接口,一般的做法是直接以SQL文本作為參數,但這樣就幾乎喪失了封裝的意義。這里的核心問題是Query本身是復雜的,我們應該將它對象化為一個 類,在程序中控制Query的結構,而一個文本對象與一個復雜的Java結構對象的差異就在于對于文本對象我們很難有什么假定,因而在程序中也很難編制通 用的程序對其進行處理,一般只能對它進行傳遞。實際上,文本中描述的結構存在于java程序之外!當然,我們可以利用Parser來重新發現這種結構,那 最容易使用的Parser就是xml parser了,所以我們應該將Query的結構建立在xml描述的基礎上。
          edu.thu.search.Query類直接體現了對主題域的通用查詢條件。(對比我對數據倉庫模型的描述)
          class Query{
              List getFields();
           TreeNode getCondition();
          }
          查 詢條件主要通過TreeNode進行顯式建模,使得程序有可能對它進行進一步的處理。例如,在DataSource處理Query之前,權限配置模塊可以 將附加約束直接追加到現有查詢條件之后,實現對數據權限的行級控制。因為把Fields明確分離出來,我們也可以做到對權限的列級控制。
          Query類的使用示例如下:
          Query.begin().fields(TEST_FIELDS)
                       .condition().eq(ID,"3")
             .end().resultType(IQueriable.TYPE_ROW_MAP)
             .findOne(dataSource).mapValue();
          這里的調用接口的設計基本遵循與SQL類相同的風格,只是面向主題域而不是直接針對SQL語言的封裝。
          主站蜘蛛池模板: 山西省| 广德县| 田林县| 慈利县| 曲沃县| 福贡县| 易门县| 祁门县| 南安市| 阳泉市| 亚东县| 枣阳市| 朝阳县| 峨边| 济源市| 龙井市| 山西省| 新龙县| 迁安市| 安多县| 晋城| 十堰市| 贵阳市| 桦川县| 东平县| 沐川县| 宝鸡市| 浑源县| 乡宁县| 玉环县| 广德县| 长兴县| 哈尔滨市| 光泽县| 龙海市| 滦南县| 阿克陶县| 家居| 固阳县| 马龙县| 东辽县|