在轻量级数据持久层Seaking.PL简介及建议征集中,已经对Seaking.PL(以下简称PL)进行了简单的介绍,并对PL中的主要对象Session的使用进行了说明。本文将介绍PL中的另一个重要对象Query。(本文的部分用语及示例从轻量级数据持久层Seaking.PL简介及建议征集中承接而来)
Query是数据查询对象,不具备Session对象的操作功能,但查询功能更加强大,包括对View(视图)的查询及对Join(关联)、Condition(条件)、Order(排序)、Alias(别名)等的支持。
使用说明:
1.声明及实例化。
同Session一样,Query对象不能用new进行实例化,而必须由DataProvider(数据提供者)对象产生。

参数可以是任何数据表名或视图名。示例中的Employee.tableName是Employee实体类所对应数据表的表名,等同于字符串“employee”。如果需要使用表的别名,可以如下声明:

也可以在声明Query的实例后再指定Query的TableName属性值和TableAlias属性值:



不指定表的别名时,表的别名即是表名(下同)。
2.添加查询结果中的字段列表(Fields)。


参数是数据表或视图的字段名。如果需要指定字段的别名,可以如下声明:


当使用联接查询时,表(或视图)、字段的别名是非常有用的。
如果不添加任何字段列表,Query将按照默认自动添加所有字段。
3.添加查询条件(Conditions)。
Query对象有一个非常重要的属性Conditions,用来指定查询条件。Conditions的使用相对复杂,将在下一篇中单独说明。
4.添加排列字段及排序方式(Orders)。

参数为排序字段的名称。Query默认的排序方式为升序(ASC),如果使用降序方式,必须显式指定:

可以添加多个排序字段,按照添加顺序分别为第一、第二……排序字段。
5.联接查询。

参数为要联接的数据表名或视图名。如果需要指定别名,可如下声明:

为便于区分,我们将Query的TableName所指的表(或视图)称为主表,将此处联接所指的表(或视图)称为联接表。
Query默认的联接方式是INNER JOIN,其他联接方式必须显示指定,如:

每个联接必须至少指定一个联接条件(OnCondition),否则将引发异常。

第一个参数为主表的字段名,第二个参数为联接表的字段名。Query默认的联接方式为等值联接,其他联接方式必须显式指定,如:

可以象对主表一样对联接表进行添加字段列表,添加查询条件等操作,如:


也可以根据联接表的字段对查询结果进行排序,与字段列表、查询条件不同的是,联接表的排序字段应该在Query中指定,如:

可以看出,添加排序字段的操作同主表是一致的,但需要指定表名。事实上,添加主表的排序字段也可以使用这种格式,但主表的表名是可以省略的。
每一个Query可以添加一个或多个联接。
6.获取或填充数据集。
根据我们的需要做完以上的一项或多项工作后,便可以获取或填充数据集,得到我们需要的结果。

或


数据集中的表(DataTable)名为Query中所指定的TableAlias。
其他:
1.虽然Query对象的功能已相对强大,但仍无法满足一些复杂查询的要求,建议将复杂查询建立视图后使用。
2.为了便于使用者调试,Query对象提供了GetSelectString()方法,可以查看Query所生成的查询字符串。
结束
轻量级数据持久层Seaking.PL简介及建议征集发布后,许多朋友给予了关注并发表了自己的看法,在此表示感谢。同时欢迎大家继续关注Seaking.PL并提出宝贵建议!