- 4.3.1.17.1 概要
- 4.3.1.17.2 INDEX_USED
- 4.3.1.17.3 SCAN_TYPE
- 4.3.1.17.4 SCAN_TYPE_INDEX_SCAN
- 4.3.1.17.5 SCAN_TYPE_PRIMARY_KEY
- 4.3.1.17.6 SCAN_TYPE_TABLE_SCAN
- 4.3.1.17.7 SCAN_TYPE_UNIQUE_KEY
- 4.3.1.17.8 deletePersistentAll()
- 4.3.1.17.9 execute(Map<String, ?>)
- 4.3.1.17.10 execute(Object...)
- 4.3.1.17.11 execute(Object)
- 4.3.1.17.12 explain()
- 4.3.1.17.13 getResultList()
- 4.3.1.17.14 setLimits(long, long)
- 4.3.1.17.15 setOrdering(Query.Ordering, String...)
- 4.3.1.17.16 setParameter(String, Object)
Query 執行個體代表具有繫結參數的特定查詢。該執行個體由方法 com.mysql.clusterj.Session.<T>createQuery(com.mysql.clusterj.query.QueryDefinition<T>)
建立。
public interface Query<E> {
// Public Static Fieldspublic static final String INDEX_USED = "IndexUsed";
public static final String SCAN_TYPE = "ScanType";
public static final String SCAN_TYPE_INDEX_SCAN = "INDEX_SCAN";
public static final String SCAN_TYPE_PRIMARY_KEY = "PRIMARY_KEY";
public static final String SCAN_TYPE_TABLE_SCAN = "TABLE_SCAN";
public static final String SCAN_TYPE_UNIQUE_KEY = "UNIQUE_KEY";
// Public Methodspublic abstract int deletePersistentAll();
public abstract Results<E> execute(Object parameter);
public abstract Results<E> execute(Object[] parameters);
public abstract Results<E> execute(Map<String, ?> parameters);
public abstract Map<String, Object> explain();
public abstract List<E> getResultList();
public abstract void setLimits(long skip,
long limit);public abstract void setOrdering(Ordering ordering,
String[] orderingFields);public abstract void setParameter(String parameterName,
Object value);
}
public abstract int deletePersistentAll();
刪除符合查詢條件的執行個體。
public abstract Results<E> execute(Map<String, ?> parameters);
使用一個或多個具名參數執行查詢。參數會依名稱解析。
public abstract Results<E> execute(Object[] parameters);
使用一個或多個參數執行查詢。參數會依其在查詢中宣告的順序解析。
public abstract Results<E> execute(Object parameter);
使用正好一個參數執行查詢。
public abstract Map<String, Object> explain();
說明將如何或已如何執行此查詢。如果在繫結所有參數之前呼叫,則會擲回 ClusterJUserException。傳回一個 key:value 配對的對應,說明將如何或已如何執行查詢。可以透過呼叫值的 toString 來取得詳細資料。傳回下列索引鍵
-
ScanType:掃描的類型,值為
PRIMARY_KEY:查詢使用主鍵進行索引鍵查閱
UNIQUE_KEY:查詢使用唯一索引鍵進行索引鍵查閱
INDEX_SCAN:查詢使用非唯一索引鍵進行範圍掃描
TABLE_SCAN:查詢使用資料表掃描
IndexUsed:所使用索引的名稱 (如果有的話)
例外狀況
-
ClusterJUserException
如果不是所有參數都已繫結
public abstract List<E> getResultList();
以清單形式取得結果。
例外狀況
-
ClusterJUserException
如果不是所有參數都已繫結
-
ClusterJDatastoreException
如果資料儲存區報告例外狀況
public abstract void setLimits(long skip,
long limit);
設定要傳回的結果限制。修改查詢的執行,只傳回結果的子集。如果篩選器通常會傳回 100 個執行個體,skip 設定為 50,而 limit 設定為 40,則會跳過原本會傳回的前 50 個結果,傳回接下來的 40 個結果,並忽略其餘的 10 個結果。
參數 skip 必須大於或等於 0 (請參閱下方的例外狀況),而 limit 必須大於或等於 0。
當與 deletePersistentAll 搭配使用時,skip 必須為 0,而且應該以反覆方式刪除執行個體,直到刪除的執行個體計數小於批次大小。例如
/* Delete in batches */
query.setLimits(0, DeleteBatchSize);
int result = 0;
do { result = query.deletePersistentAll();
System.out.println("Batch result: " + result);
} while(result == DeleteBatchSize);
public abstract void setOrdering(Ordering ordering,
String[] orderingFields);
設定此查詢結果的排序。修改查詢的執行,以使用先前定義的索引。
必須針對對應至排序欄位的資料行定義索引,順序與排序欄位相同。
相較於索引,排序欄位中不得有間隔。
所有排序欄位都必須在索引中,但索引中的並非所有欄位都需要在排序欄位中。
如果在排序中欄位上篩選器中使用「in」述詞,則只能與第一個欄位搭配使用。
如果違反其中任何一個條件,則在執行查詢時會擲回 ClusterJUserException。
如果使用 "in" 述詞,參數中的每個元素都會定義一個獨立的範圍,並且在該範圍內執行排序。根據篩選條件可能會存在更好(更有效率)的索引,但是指定排序將會強制查詢使用包含排序欄位的索引。
表格 4.42 setOrdering(Query.Ordering, String...)
參數 | 描述 |
---|---|
ordering | 可以是 Ordering.ASCENDING 或 Ordering.DESCENDING |
orderingFields | 要排序的欄位 |