文档详情

NHibernate之旅:探索查询之条件查询(Criteria Query).docx

发布:2017-12-16约3.95千字共5页下载文档
文本预览下载声明
NHibernate之旅:探索查询之条件查询(Criteria Query)本节内容NHibernate中的查询方法条件查询(Criteria Query)1.创建ICriteria实例2.结果集限制3.结果集排序4.一些说明根据示例查询(Query By Example)实例分析结语上一节,我们介绍了NHibernate查询语言的一种:NHibernate查询语言(HQL,NHibernate Query Language),这一节介绍一下条件查询(Criteria API)。NHibernate中的查询方法在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Criteria Query)、(根据示例查询(QBE,Query By Example)是条件查询的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。每个人有不同的喜好和特长,可以根据自己的情况选择使用其中的一种或几种。这一节我们介绍条件查询。条件查询(Criteria Query)HQL极为强大,但是有些人希望能够动态的使用一种面向对象API创建查询,而不是在.NET代码中嵌入字符串。在NHibernate中,提供了一种直观的、可扩展的Criteria API。在我们键入查询语句的时候,提供了编译时的语法检查,VS提供了强大的智能提示。如果你对HQL的语法感觉不是很舒服的话,用这种方法可能更容易。这种API也比HQL更可扩展。典型用法:从ISession接口中创建ICriteria实例对象;在这个ICriteria实例对象上设置一个或多个表达式;要求ICriteria接口返回需要的列表,就是根据表达式从数据库中返回对象。注意:由于篇幅有限,我在这里仅仅贴出了数据访问层的代码。测试这些方法的代码就没有贴出来了,你可以下载本系列的源代码仔细看看测试这些方法的代码。这些实例我争取写出来可以运行起来,大家下载源码看看效果,一些数据需要按个人数据库里的数据情况修改。例如查询条件和结果。这节,我们在上一节源代码的基础上,在数据访问层中新建QueryCriteriaAPI.cs类用于编写条件查询方法,在数据访问的测试层新建一QueryCriteriaAPIFixture.cs类用于测试。1.创建ICriteria实例使用ISession接口的CreateCriteria方法创建了NHibernate.ICriteria接口一个特定的持久化类的查询实例,也可以说ISession是用来制造Criteria实例的工厂。public IListCustomer CreateCriteria(){ICriteria crit = _session.CreateCriteria(typeof(Customer)); crit.SetMaxResults(50);IListCustomer customers = crit.ListCustomer();return customers;}例如上面的例子返回Customer对象集合,设置最大的集合数量为50条。2.结果集限制使用ICriteria接口提供的Add方法添加Restrictions类中约束表达式可以限制一些结果集的作用。public IListCustomer Narrowing(){IListCustomer customers = _session.CreateCriteria(typeof(Customer)) .Add(Restrictions.Like(Firstname, YJing%)) .Add(Restrictions.Between(Lastname, A%, Y%)) .ListCustomer();return customers;}3.结果集排序使用ICriteria.Order对结果集排序,第二个参数true代表asc,false代表desc。例如下面例子查询Customer对象按FirstName降序、Lastname升序。public IListCustomer Order(){return _session.CreateCriteria(typeof(Customer)) .Add(Restrictions.Like(Firstname,Y%)) .AddOrder(new NHibernate.Criterion.Order(Firstname, false)) .AddOrder(new NHibernate.Criterion.Order(Last
显示全部
相似文档