- 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。返回一个键值对映射,解释查询将如何执行或已如何执行。可以通过对值的 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.ASCENDING 或 Ordering.DESCENDING |
排序字段 | 要排序的字段 |