Titan Framework MongoDB深刻理解3

在前兩篇文章中,咱們介紹了操做Mongo數據庫的類型Curd和Finder,下面要理解的是框架內mongoDB操做的條件類型——MongoDBQueryCondition。java

MongoDBQueryCondition是一個接口,規定了一些實現類需求方法,這個類有惟一的實現類MongoDBQueryConditionImpl,在實現類中,包含幾個關鍵屬性,分別是:數據庫

  1. String tableName
  2. Object condition
  3. Document conditionBson
  4. Int pageSize
  5. Int currentPage
  6. Document orderBy
  7. Class<?> clazz

tableName用於存放指定條件的表名,condition是一個用於實現類的內部類使用的屬性,conditionBson用於存放用於內部類使用的Mongo節點類型,pageSize和currentPage你們應該不陌生,這兩個屬性用於存放分頁查詢的條件,orderBy用於存放排序的條件,clazz是一個用於內部類使用的類類型屬性。在該實現類中,給出了pageSize,currentPage,tableName,clazz,condition,orderBy這些屬性的get方法,用戶能夠經過get方法查詢到當前查詢條件對象的各個屬性的狀態。數據結構

下面講解該類最重要的內部類成分,在這以前還有一點須要提一下的是,MongoDBQueryCondition接口中有一個靜態方法Condition,該方法參數爲一個函數,用戶可使用lambda輕鬆編寫查詢條件,該方法中建立了接口實現類的內部類Buidler,經過鏈式調用Builder內部的方法來添加,方法自己並不返回builder對象,由於內部經過java8的Consumer類的accept()忽略了進行傳入參數函數並執行函數後得到的返回值,框架爲該方法指定返回一個MongoDBQueryCondition對象。框架

內部類在上邊已經提過,叫作Builder,在類中,它建立了一個它的外部類MongoDBQueryConditionImpl實例,內部有一個方法getCondition()會將該實例返回,上文說的MongoDBQueryCondition對象就是經過該方法得到。函數

類中的Table方法參數爲Object對象,它將該對象的類名做爲表名,而且用過該對象的類構造器獲取該類的類類型做爲類型屬性,以肯定條件中表的屬性參數,它有一個重載方法,傳遞兩個參數,分別是String類型的表名字和Class類類型,用戶能夠經過該重載方法添加不一樣於類名的表名的查詢條件(如類名爲A,但數據庫表名爲B)。ui

Page方法參數爲兩個int類型的參數,第一個參數表示當前頁數,第二個參數表示取出數目,須要注意的是框架的分頁已經實現完畢,不須要進行其餘的計算,若是須要取出第3頁數據,每頁展現10條數據,那麼參數應該傳爲(3,10),而不是(20,10)。對象

Condition方法參數爲一個泛型類型,在使用TitanFrameWork以前,您的數據結構也許使用了DBObject而非Document的形式進行存儲,Titan內部沒有提供該形式的存儲方式,但提供了讀取該形式數據的方法,若在調用該方法以前沒有調用Table方法,默認會使用該類名做爲表名條件,查詢表中符合條件的DBObject對象。排序

Condition有一個重載方法,傳遞兩個參數,一個是String類型的key,表示查詢條件key關鍵字,一個是Object類型的value,表示查詢條件的value關鍵字,這個重載方法和上面的方法不一樣的地方在於這裏使用了Document的形式讀取數據,而且沒有默認的表名稱判斷,須要用戶顯式調用Table指定查詢的表名,框架會根據條件去查找表中符合"key":"value"的數據集合。若是value的類型爲java.util.List,那麼會判斷爲用戶須要查詢一鍵多值的狀況,相似於$in查詢條件。用戶可使用多個Condition來完成最終的符合條件查詢。接口

OrderBy是一個排序方法,有兩個參數類型,傳遞key和value,這裏再也不判斷任何條件,用戶能夠根據業務需求和上面的方法組合成複雜的嵌套排序篩選出最終結果。get

相關文章
相關標籤/搜索