SmartPersistenceLayer 2.0 之 Condition篇

原理

       强大的Condition功能是SPL的一个特性,可以使用Condition完成绝大部分的条件定义,使用也是最广泛的,如RetrieveCriteria,UpdateCriteria,DeleteCriteria,Query等,只要用到查询条件的地方,都会使用此Condition类.

Condition的实例化方式:

RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Conditionc=rc.GetNewCondition();

UpdateCriteria uc=newUpdateCriteria (typeof(StudentEntity));

Conditionc=uc.GetNewCondition();

DeleteCriteria dc=newDeleteCriteria (typeof(StudentEntity));

Conditionc=dc.GetNewCondition();

Query q=newQuery(typeof(StudentEntity));

Condition c=q.GetQueryCondition();

Condition内部是and关系,Condition之间,是以”Or”的方式组合的

如:

RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Conditionc=rc.GetNewCondition();

c.AddEqualTo(StudentEntity.Name,”tintown”);

c.AddNotEqualTo(StudentEntity.Sex,’男’);

Conditionc2=rc.GetNewCondition();

c2.AddEqualTo(StudentEntity.Id,”1”);

这样会产生”(Name=’tintown’ andSex<>’男’) or Id=1”这样的结果.

常用条件

下面以RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Condition c=rc.GetNewCondition();

AddEqualTo (=)

相等比较:会生成类似”where name=’tintown’”的语句, 例如:

c.AddEqualTo(“Name”,”tintown”);

AddGreaterThan(>)

大于比较:会生成类似” where price > 1000”的语句

c.AddGreaterThan(“Price”,1000);

AddGreaterThanOrEqualTo(>=)

大于等于比较: 会生成类似” where price >= 1000”的语句

c.AddGrearterThanOrEqualTo(“Price”,1000);

AddNotEqualTo(<>)

不等于比较: 会生成类似” where name<>’tintown’”的语句

c.AddNotEqualTo(“Name”,”tintown”);

AddLessThan(<)

小于比较: 会生成类似” where price < 1000”的语句

c.AddLessThan(“Price”,1000);

AddLessThanOrEqualTo(<=)

小于等于比较: 会生成类似” where price <= 1000”的语句

c.AddLessThanOrEqualTo(“Price”,1000);

AddMatch(like ‘%A%’)

匹配比较: 会生成类似” where name like ‘%刘%’”的语句

c.AddMatch(“Name”,”刘”);

AddMatchPrefix(like ‘A%’)

前匹配比较: 会生成类似” where name like ‘刘%”的语句

c.AddMatchPrefix(“Name”,”刘”);

AddIn(in (A))

IN比较: 会生成类似” where name in (‘K’,’ I’)”的语句

string[] where=new string[]{“K”,”I”}

c.AddIn(“Name”,where);

OrGroup条件类[2.0新增功能]

在常规中,我们注意到,很难实现A and B and ( C or D)这样的效果,所以在这里添加了OrGroup类。

OrGroup是指Or的组,在OrGroup内,关系都是Or,所以可以通过以下代码要实现:

RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity));

Condition c=rc.GetNewCondition();

c.AddEqualTo(….)                //条件A

c.AddEqualTo(….)                //条件B

OrGroup og=rc. GetNewOrGroup();   //实例一个OrGroup

og.AddEqualTo(…);                           //条件C

og.AddEqualTo(…);                           //条件 D

C和D形成一个Or组,这样就实现了A and B and ( C or D)

通过以上方式可以实现更强的条件定义

字段与字段比较[2.0新增功能]

为了字段与字段的比较,为此扩展了查询条件,

字段间相等AddEqualToField

c.AddEqualToField(“field1”,field2);

这会生成类似”where field1=field2”

字段间大于AddGreaterThanField

c. AddGreaterThanField (“field1”,field2);

这会生成类似”where field1>field2”

字段间大于等于AddGreaterThanOrEqualToField

c. AddGreaterThanOrEqualToField (“field1”,field2);

这会生成类似”where field1>=field2”

字段间不等于AddNotEqualToField

c. AddNotEqualToField (“field1”,field2);

这会生成类似”where field1<>field2”

字段间小于AddLessThanField

c. AddLessThanField (“field1”,field2);

这会生成类似”where field1<field2”

字段间小于等于AddLessThanOrEqualToField

c. AddLessThanOrEqualToField (“field1”,field2);

这会生成类似”where field1<=field2”

总结

SPL虽然提供了很强的条件定义功能,如果遇到特别复杂的条件,还是需要自己手写SQL语句进行查询的。

[置顶] SPL讲解(6)--Condition篇的更多相关文章

  1. [置顶] SPL讲解(4)--Criteria操作篇

    概念 以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的.如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和De ...

  2. [置顶] SPL讲解(7)--Query高级篇

    SmartPersistenceLayer 2.0 之Query高级查询篇 总述 在看了前面的功能后,大家都会考虑到多表之间的查询怎么办.在这里,我想先讲一下查询在应用系统中的复杂性/重要性/可行性. ...

  3. [知了堂学习笔记]_css3特效第二篇--行走的线条&&置顶导航栏

    一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: <div class="movingLines"> <img src=" ...

  4. css3特效第二篇--行走的线条&&置顶导航栏

    一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: <div class="movingLines"> <img src=" ...

  5. 让WPF的Popup不总置顶的解决方案

    使用WPF的Popup的时候会发现有一个问题,它总是会置顶,只要Popup的StayOpen不设置为False,它就一直呆在最顶端,挡住其他的窗口. 解决方案是继承Popup重新定义控件PopupEx ...

  6. [置顶] 创建GitHub技术博客全攻略

    [置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...

  7. About me & 一些置顶的博文

    About me 一只历史上最弱的 \(\text{hnoier}\) ... 身在 \(\text{hn}\) 弱校,除了在四大名校夹缝中生存,还要受到同校 \(\text{Julao}\) 的鄙视 ...

  8. Ionic-wechat项目边开发边学(四):可伸缩输入框,下拉刷新, 置顶删除

    摘要 上一篇文章主要介绍了ion-list的使用, ion-popup的使用, 通过sass自定义样式, localStorage的使用, 自定义指令和服务. 这篇文章实现的功能有消息的置顶与删除, ...

  9. thinkphp内置标签简单讲解

    thinkphp内置标签简单讲解 1.volist循环 name 需要遍历的数据 id 类似于foreach中 value offset 截取数据起始位置 length 截取数据的个数 mod 奇偶数 ...

随机推荐

  1. 微信授权登陆接入第三方App(步骤总结)Android

    微信授权登陆接入第三方App(步骤总结)Android Android App实现第三方微信登录

  2. LCS算法思想

    LCS问题就是求两个字符串最长公共子串的问题.解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0.然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的 ...

  3. KDTree详解及java实现

    本文内容基于An introductory tutoril on kd-trees 1.KDTree介绍 KDTree根据m维空间中的数据集D构建的二叉树,能加快常用于最近邻查找(在加快k-means ...

  4. <转载>C++命名空间

    原文http://blog.csdn.net/liufei_learning/article/details/5391334 一. 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由 ...

  5. pyqt字符串分离开,放入列表中

    string1 = ''''' the stirng Has many line In THE fIle ''' list_of_string = string1.split() print list ...

  6. struts——文件上传

    上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...

  7. 再一次强调,ORACLE外键必须加索引

    外键加索引是常识,必须牢记.本来不想写这样的简单案例.可是连续遇到好几起外键不加索引导致性能问题,所以还是写一下. 一个兄弟问我 delete from Sa_Sales_Comm_Detail s  ...

  8. Android应用程序安装过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...

  9. Docker image 镜像介绍

    操作镜像 使用 docker 命令行操作 docker 镜像 获取镜像 使用「docker pull +镜像名称」从网络上下载image镜像 core@localhost ~ $ docker pul ...

  10. Margin是什么?

    Margin是什么 CSS 边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.——W3School 边界,元素周围生 ...