[NHibernate]条件查询Criteria Query
目录
写在前面
上篇文章介绍了HQL查询,我个人觉得使用ORM框架就是为了让少些sql,提高开发效率,而再使用HQL就好像还是使用sql,就觉得有点又回到使用sql的年代。但是完全不用hql也不是绝对的,HQL更接近原生态的sql,对于一些比较复杂的查询,HQL的作用就体现出来了。作为使用面向对象语言的程序员,有时更愿意采用面向对象的方式去思考问题,去实现查询,这就是本篇文章要学习的条件查询(Criteria Query)。
文档与系列文章
[NHibernate]持久化类(Persistent Classes)
[NHibernate]集合类(Collections)映射
[NHibernate]缓存(NHibernate.Caches)
[NHibernate]NHibernate.Tool.hbm2net
[NHibernate]Nhibernate如何映射sqlserver中image字段
条件查询
Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。再直白点讲就是,Criteria Query可以看作是传统SQL的对象化表示。
在Nhibernate中提供了条件查询的Criteria API,在程序中可以通过ISession创建ICriteria实例,并在ICriteria对象上设置一个或者多个表达式,然后从数据库
中查询获得对象的列表。
创建ICriteria对象
代码描述:通过ISession创建一个ICriteria实例,然后返回最多50条客户信息的集合。
/// <summary>
/// 通过条件查询Criteria查询顾客信息
/// </summary>
/// <returns></returns>
public IList<Customer> GetCustomers()
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
//获得ISession实例
ISession session = nhibernateHelper.GetSession();
//通过ISession创建ICriteria实例
ICriteria criteria = session.CreateCriteria(typeof(Customer));
// Set a limit upon the number of objects to be retrieved
//汉:设置最大的检索对象个数
criteria.SetMaxResults();
return criteria.List<Customer>();
}
使用条件查询ICriteria,可以通过Restrictions添加限制条件来限制结果集。
Criteria Query常用的查询限制方法
| 方法 | 描述 |
|
Restrictions.eq() |
equal,= |
|
Restrictions.allEq() |
使用key/value进行多个等于的对比,等价于使用多个Restrictions.eq()的效果 |
|
Restrictions.gt() |
greater-than, > |
|
Restrictions.lt() |
less-than, < |
|
Restrictions.le() |
less-equal, <= |
|
Restrictions.between() |
在什么之间,类似sql中的between |
|
Restrictions.like() |
类似sql中的like,模糊查询 |
|
Restrictions.in() |
在什么之内,类似于sql中的in |
|
Restrictions.and() |
并且 |
|
Restrictions.or() |
或者 |
|
Restrictions.isNull() |
是否为null |
|
Restrictions.isNotNull() |
是否不为null,与上相反。 |
|
Order.asc() |
根据传入的字段进行升序排序。 |
|
Order.desc() |
根据传入的字段进行降序排序。 |
|
MatchMode.EXACT |
字符串精确匹配,相当于“like 'value'” |
|
MatchMode.ANYWHERE |
字符串在中间位置,相当于“like '%value%'” |
|
MatchMode.START(END) |
字符串在最前面的位置,相当于“like 'value%'”("like '%value'") |
一个例子
首先引入命名空间
using NHibernate.Criterion;
/// <summary>
/// 通过条件查询Criteria查询顾客信息
/// </summary>
/// <returns></returns>
public IList<Customer> GetCustomers()
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
//获得ISession实例
ISession session = nhibernateHelper.GetSession();
//通过ISession创建ICriteria实例
ICriteria criteria = session.CreateCriteria(typeof(Customer));
//查询名字以w开头的客户信息。
criteria.Add(Restrictions.Like("CustomerName", "w%"));
//另一种方式
criteria.Add(Restrictions.Like("CustomerName", "w", MatchMode.Start));
//查询名字在wolfy和zhangsan内的客户信息
criteria.Add(Restrictions.In("CustomerName", new string[] { "zhangsan", "wolfy" }));
//查询名称不为null的客户信息
criteria.Add(Restrictions.IsNotNull("CustomerName"));
//查询名称等于wolfy的客户
criteria.Add(Restrictions.Eq("CustomerName", "wolfy"));
//查地址是北京海淀区 并且名字为wolfy的客户
criteria.Add(Restrictions.And(Restrictions.Like("CustomerAddress", "北京%"), Restrictions.Eq("CustomerName", "wolfy")));
//按照名字升序排列
criteria.AddOrder(NHibernate.Criterion.Order.Asc("CustomerName"));
return criteria.List<Customer>();
}
看一下生成的sql是什么?
总结
同样在Criteria 查询中使用FetchMode来实现连接限制,这里就不再举例了,感兴趣的可以自己试一试。
说实话,在项目中从没发现使用条件查询的地方,一些查询的方法都是千篇一律的,时间久了,绝对会腻了。如过你在项目中采用了该种方式,是不是瞬间觉得高大上了?我还是引用自己在前面说过的那句话,实现一个业务有A,B,C三种方式,而A是你经常用的,闭着眼都能把每个单词背出来了,你还在用,为啥不尝试一下B和c两种方式。
通过本篇的学习,我们了解了条件查询,在限制结果集方面做的还是非常好的,提供了常用的限制方法,更接近咱们的思维方式,何不在项目中使用起来,也让咱们的代码充满灵气,而不是千篇一律,死气沉沉的代码。
[NHibernate]条件查询Criteria Query的更多相关文章
- [转]NHibernate之旅(4):探索查询之条件查询(Criteria Query)
本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...
- nhibernate教程(4)--条件查询(Criteria Query)
NHibernate之旅(4):探索查询之条件查询(Criteria Query) 2008-10-16 18:20 by 李永京, 44341 阅读, 43 评论, 收藏, 编辑 本节内容 NHi ...
- Hibernate动态条件查询(Criteria Query)
1.创建一个Criteria实例net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询.Session是用来制造Criteria实例的工厂. Criteria cri ...
- NHibernate初学三之条件查询(Criteria Queries)与AspNetPager分页实例
NHibernate除了SQL与HQL两种查询操作外,还有一种就是条件查询Criteria,本文将从网上整理一些Criteria的理论及小实例,最后通过一个结合AspNetPager分页来加深理解,必 ...
- 条件查询Criteria
public User getUserByNameCri(String name){ Session session = null; User user = null; try { session = ...
- Hibernate QBC 条件查询(Criteria Queries) and Demos
目录 创建一个Criteria 实例 限制结果集内容 结果集排序 关联 动态关联抓取 查询示例 投影Projections聚合aggregation和分组grouping 离线detached查询和子 ...
- NHibernate系列学习(三)-条件查询Criteria
1.本笔记主要介绍Criteria的使用 2.效果界面 3.代码详情 namespace KimismeDemo { public partial class Form3 : Form { priva ...
- NHibernate - ICriteria 查询
http://blog.knowsky.com/213234.htm http://blog.chinaunix.net/uid-20463341-id-1673509.html http://www ...
- hibernate Criteria(条件查询接口)
Criteria(条件查询接口) // 1.简单查询 List<Customer> list = session.createCriteria(Customer.class).list() ...
随机推荐
- Linux 下编译openjdk
操作系统ubuntu14.04 openjdk版本 7u4 openjdk7u4可以在https://jdk7.java.net/source.html下载 一.构建编译环境 sudo apt-g ...
- CML相关
!!:执行上一条命令 !blah:执行最近的以 blah 开头的命令,如 !ls !blah:p:仅打印输出,而不执行 !$:上一条命令的最后一个参数,与 Alt + . 相同 !$:p:打印输出 ! ...
- ffmpeg编译常规大全
其中有需要CMake的,可以直接sudo apt-get install cmake 编译yasm wget http://www.tortall.net/projects/yasm/releas ...
- size_t和size_type
size_t和size_type是为了独立于及其而定义的类型,因为比如在一台电脑上int为2b,而另一台电脑上是4b,这样就给程序的可移植性带来了麻烦.为了解决这个问题,在库内定义了如上类型,其实si ...
- Utils
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils ...
- Maven配置详见
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 maven 配置详解 标签: mave ...
- simpleCart的简单使用及配置
simpleCart的功能就不用解释,购物车,很6.官网上的说明太模糊了,还是GIHUb上的好一点:https://github.com/wojodesign/simplecart-js/ 文章解决问 ...
- IP地址查询接口及调用方法
1.查询地址 搜狐IP地址查询接口(IP):http://pv.sohu.com/cityjson 1616 IP地址查询接口(IP+地址):http://w.1616.net/chaxun/ipto ...
- TinyFrame系列:基于EFCodeFirst,IOC,AOP的轻型框架
TinyFrame开篇:基于CodeFirst的ORM TinyFrame续篇:整合Spring IOC实现依赖注入 TinyFrame再续篇:整合Spring AOP实现日志拦截 TinyFrame ...
- koa简介
资料来源:http://javascript.ruanyifeng.com/nodejs/koa.htmlhttp://koa.bootcss.com/ 以下内容为摘抄,纯属做笔记加深印象.勿喷. 使 ...