Rafy 框架 - 通用查询条件(CommonQueryCriteria)

简介:

在应用开发过程中,有 80% 的场景下,开发者所需要的实体查询,查询条件中其实都是一些简单的属性匹配,又或是一些属性匹配的简单组合。Rafy 为这样的场景提供了更为方便使用的 API:CommonQueryCriteria。

 

属性匹配


在查询时,当需要使用一个或几个属性的限定匹配来进行查询时,我们可以通过 CommonQueryCriteria 来使用以下方法进行快速查询。例如,以下查询实现了通过用户的编码的精确匹配来查询唯一指定的用户:

C#

public User GetByCode(string code)
{
    return this.GetFirstBy(new CommonQueryCriteria
    {
        new PropertyMatch(User.CodeProperty, PropertyOperator.Equal, code)
    });
}

例如,以下查询实现同时通过用户名称的模糊匹配、年龄的精确匹配来查询一组用户(由于 Age 未指定 PropertyOperator,所以使用的是 Equal):

C#

public UserList GetByNameAge(string name, int age)
{
    return this.GetBy(new CommonQueryCriteria
    {
        new PropertyMatch(User.NameProperty, PropertyOperator.Contains, name),
        new PropertyMatch(User.AgeProperty, age)
    });
}

上述查询默认使用 And 进行多条件的连接。如果需要修改,可以通过 CommonQueryCriteria 的构造器传入或属性进行设置。

PropertyOperator 表示属性匹配的方式,可用的操作有:

  • Equal

  • NotEqual

  • Greater

  • GreaterEqual

  • Less

  • LessEqual

  • Like

  • NotLike

  • Contains

  • NotContains

  • StartsWith

  • NotStartsWith

  • EndsWith

  • NotEndsWith

  • In

  • NotIn

 

Note Note

为了方便开发者使用 CommonQueryCriteria,RafySDK 提供了代码段 RafyQuery_Common 来生成上述代码。

 

使用多个属性匹配组进行查询


上面是比较简单的查询,只是对单个属性或使用 And、Or 连接的几个条件进行匹配。我们还可以通过属性匹配组来实现相对复杂的查询。

一个 CommonQueryCriteria 中可以通过 And、Or 连接多个属性匹配组,而每一个属性匹配组也可以通过 And、Or 连接多个具体的属性匹配条件。

下面的代码演示了如何使用('Name contains name' And 'Age equal age' Or 'Code equal code')的条件进行查询:

C#

this.GetBy(new CommonQueryCriteria(BinaryOperator.Or)
{
    new PropertyMatchGroup
    {
        new PropertyMatch(TestUser.NameProperty, PropertyOperator.Contains, name)
        new PropertyMatch(TestUser.AgeProperty, age)
    },
    new PropertyMatchGroup
    {
        new PropertyMatch(TestUser.CodeProperty, code)
    }
});
 

相对于 Linq 查询的优势


使用 CommonQueryCriteria 进行查询时,相对于 Linq 查询 而言,有以下的优势:

  • 更加方便、简单

    仓库类型上已经提供了参数是 CommonQueryCriteria 的公有查询方法,开发可以直接使用这些方法进行查询,没有必要再封装一个相应的公有方法。

    例如,上面的示例中,也可以不封装 GetByCode 方法,而是由仓库的调用者直接使用 GetBy(CommonQueryCriteria) 方法。

  • 性能更好

    使用 Linq 查询时,编译器会使用反射生成表达式树,然后 Rafy 框架才会解析这棵树,生成最终的 Sql 树。但是使用 CommonQueryCriteria 通用查询时,Rafy 框架会直接将 CommonQueryCriteria 中的条件生成对应的 Sql 树,这就节省了表达式树的生成和解析的环节,提升了性能。

本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/p/6005171.html,如需转载请自行联系原作者
相关文章
|
4月前
|
前端开发 Java UED
通用分页集模糊,全部查询,分页查询为一体(2)演示,优化上篇通用查询分页
通用分页集模糊,全部查询,分页查询为一体(2)演示,优化上篇通用查询分页
|
8月前
|
存储 XML SQL
Activiti工作流框架学习笔记(一)之通用数据表详细介绍
Activiti工作流框架学习笔记(一)之通用数据表详细介绍
252 1
|
11月前
|
存储 自然语言处理 算法
GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的
GaiaX跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的Native动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》,带大家看看过去三年GaiaX的发展过程。
238 0
|
存储 自然语言处理 算法
作为逻辑动态化的基础,GaiaX 表达式是如何设计的? | GaiaX 开源解读
GaiaX 跨端模板引擎,是在阿里文娱内广泛使用的 Native 动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX 开源解读》,带大家看看过去三年 GaiaX 的发展过程。 GaiaX 开源地址:https://github.com/alibaba/GaiaX
329 0
作为逻辑动态化的基础,GaiaX 表达式是如何设计的? | GaiaX 开源解读
|
开发框架 前端开发 Java
框架组合|学习笔记
快速学习框架组合
100 0
|
数据库
【自然框架】之通用权限:数据库设计的几种使用方式
      上次《【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图 》里说了一大堆的表,好多人说太复杂了,做到权限到模块就可以了。       这个嘛,我也没有说所有的表都要一起使用呀。
1186 0
|
搜索推荐 数据库
【自然框架】之通用权限(五):项目描述表组
      继续,这是第五章了。我发现了,写文章比写程序还要有难度。   通用权限想要写的文章目录:(这是第五章)    1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描述表组”6、 权限到节点7、 权限到按钮8、 权限到列...
1093 0
|
算法 数据库
【自然框架】元数据的数据库结构的详细说明和示例(一):项目描述部分
自然框架在线演示:  http://pthuanyu.com/   【自然框架】PowerDesigner 格式的元数据的表结构   自然框架的源码、Demo、数据库、说明文档的下载,还是老地方:自然框架的源代码、Demo、数据库、配置信息管理程序下载(2010.
933 0