SELECT 子句中的单列表达式
在查询结果集中选择一个类后,该类的每一列都将包括在 SELECT 子句中,以便可以在 QueryResult 中构建并返回完整的对象。在某些情况下,结果集中只需要单个列。如有可能,应使用单列,因为这会更高效,并且能提供更好的性能。以下 API 支持 SELECT 子句中的单列表达式:appendSelect(ColumnExpression a_column, int[] a_fromIndices, boolean a_selectOnly)
fromIndices 参数用于将列表达式与查询中的类相关联 (如果适用)。通常,ColumnExpression 可能与 From 子句中的零个或多个类关联。请参阅下表,以根据 ColumnExpression 的类型确定 a_fromIndices 数组的大小。例如,单个 ClassAttribute 将需要一个 from 索引。具有两个 ClassAttribute 自变量和一个 ConstantExpression 自变量的 SQLFunction 需要两个 from 索引。如果不需要 fromIndices,则可以将空值作为自变量传递。selectOnly 参数控制是否应将列表达式作为结果对象返回。如果为 true,则列表达式仅包括在 select 中,并且不作为结果返回。
ColumnExpression 参数指定要附加到 select 子句的查询列。以下是具体的 ColumnExpression 实现:
列表达式
说明
必需项索引
ClassAttribute
此类表示可在 SQL 语句中使用的类属性。自省信息用于确定关联的表格和列。
1
SQLFunction
此类表示 SQL 语句中的 SQL 函数。
0 或更多。此数字基于所有自变量的必需项索引的总和。
ConstantExpression
此类表示 SQL 语句中的常量。
0
KeywordExpression
此类表示一个表达式,该表达式的结果为可以在 SQL 语句中使用的 SQL 关键字。
0
TableColumn
此类表示可在 SQL 语句中使用的表列。指定的精确表格和列名称将直接用于 SQL 语句中。
0
以下示例构建部件编号查询:
QuerySpec qs = new QuerySpec();
int classIndex = qs.appendClassList(wt.part.WTPart.class, false);
ClassAttribute ca = new ClassAttribute(
wt.part.WTPartclass, wt.part.WTPart.NUMBER);
qs.appendSelect(ca, new int[] { classIndex }, false);
请注意,当将 WTPart 类附加到查询时,可选择参数为 false。未返回完整对象;仅返回数字列。
结果仍会在 QueryResult 对象中返回。QueryResult 的每个元素对应于一行,并且是一个对象数组 (即 Object[])。在此示例中,编号列在每个元素的索引 0 处。每个结果的实际 Java 类型基于表列和 JDBC SQL 到 Java 类型的映射。
父类 (即具有一个或多个可持续具体子类的类) 的查询行为是为每个表执行 SQL。当 SELECT 子句中仅包括 ColumnExpressions 时,所有这些 SQL 语句将作为单个 UNION 语句而不是多个单独的数据库查询隐式执行。
仅包括列表达式的查询仍应用了访问控制。在内部,会将列添加到查询中,以检索访问控制所需的信息。在使用聚合 SQL 函数时,了解此行为很重要。使用这些方法时,SELECT 子句必须仅包含具有聚合 SQL 函数的表达式 (或表达式必须包括在 GROUP BY 子句中。如果将访问控制应用于此类语句,则会导致 SQL 无效。
这对您有帮助吗?