`
20386053
  • 浏览: 461485 次
文章分类
社区版块
存档分类
最新评论

Criteria条件查询

 
阅读更多

条件查询

NHibernate.ICriteria接口表示特定持久类的一个查询。ISession ICriteria实例的工厂。

这里以Northwind数据库为示例数据库

示例数据表:Employees

现在只用雇员表中部分字段。

持久类如下:

public class Employees

{

public virtual int EmployeeID { get; set; }

public virtual string LastName { get; set; }

public virtual string FirstName { get; set; }

public virtual DateTime BirthDate { get; set; }

public virtual string Address { get; set; }

public virtual string City { get; set; }

public virtual string PostalCode { get; set; }

}

映射文件如下:

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Entities">

<class name="Employees" table="Employees">

<id name="EmployeeID" column="EmployeeID">

<generator class="identity"></generator>

</id>

<property name="LastName" column="LastName" type="String"></property>

<property name="FirstName" column="FirstName" type="String"></property>

<property name="BirthDate" column="BirthDate" type="DateTime"></property>

<property name="Address" column="Address" type="String"></property>

<property name="City" column="City" type="String"></property>

<property name="PostalCode" column="PostalCode" type="String"></property>

</class>

</hibernate-mapping>

开始

一)返回所有实例(返回所有雇员)

这里返回的所有实例,且是全部的属性(字段)

ICriteria crt = _session.CreateCriteria(typeof(Employees));

return crt.List<Employees>();

Isession创建条件查询实例有4个构造方法。

二)返回部分实例(返回2个雇员)

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.SetMaxResults(2);

return crt.List<Employees>();

三)条件查询的约束条件

1Expression

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.Add(Expression.Eq("City","London"));

return crt.List<Employees>();

查询内容为:雇员的城市是在伦敦的。其中Expression的名字空间为:NHibernate.Criterion

Expression 定义了获得某些内置ICriterion类型的工厂方法,这里用到了等于

2Restrictions

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.Add(Restrictions.Eq("City", "London"));

return crt.List<Employees>();

查询内容为:雇员的城市是在伦敦的。其中Restrictions的名字空间为:NHibernate.Criterion

3)通过实例来查询

Employees ee = new Employees { City = "London", BirthDate = Convert.ToDateTime("1955-03-04 00:00:00.000") };

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.Add(Example.Create(ee));

return crt.List<Employees>();

查询伦敦的,生日在那个时间的。(为什么这里我要加个生日上去?因为我的持久类中有这个属性,如果在实例查询中不给定这个值,会有日期越界的异常。在下边的例子中,来处理这种情况)这是限制的相等的实现。下边实现一个相似的例子:

Employees ee = new Employees { FirstName = "a"};

Example exp=Example.Create(ee)

.EnableLike(MatchMode.Start)

.ExcludeProperty("BirthDate")

.IgnoreCase();

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.Add(exp);

return crt.List<Employees>();

这个例子中,指定相似的姓名等a,看实例exp

·采用相似比较EnableLike

·相似比较匹配模式MatchMode.Start,开头匹配,这个应该类似于SQL中的a%

·排除比较属性ExcludeProperty,这个方法就是用于处理排除的。上个例子中日期没给,所以会出现异常,而这个方法则排除了这种异常发生(其实就是排除不比较的属性(字段))。

·忽略大小写

)排序

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.AddOrder(new NHibernate.Criterion.Order("FirstName", true));

return crt.List<Employees>();

排序字段:名字,升序(true

聚合

1)查询人数

ICriteria crt = _session.CreateCriteria(typeof(Employees));

crt.SetProjection(Projections.RowCount());

return crt.List();

NHibernate.Expression.Projections IProjection 的实例工厂。通过调用 SetProjection()应用投影到一个查询。

2Avg

从这个开始到以下的例子又回到以Products为示例数据表

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.Avg("Price"))

);

return crt.List();

通过投影列表来添加投影聚合方法。

这里取得产品的平均价格,这里没有条件约束,下边这个例子取得产品类别为2的产品的平均价格:

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.Avg("Price")))

.Add(Expression.Eq("CategoryID",2));

return crt.List();

3Max(最大价格)

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.Max("Price")));

return crt.List();

4Min(最低价格)

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.Min ("Price")));

return crt.List();

5Sum(和)

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.Sum ("Price")));

return crt.List();

6)分组

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.GroupProperty("CategoryID")));

return crt.List<int>();

这个分组只是返回一个属性,所以用int泛型可以了。下边的例子返回分组,并返回各组的数目

ICriteria crt = _session.CreateCriteria(typeof(Products));

crt.SetProjection(Projections.ProjectionList()

.Add(Projections.GroupProperty("CategoryID"))

.Add(Projections.RowCount()));

return crt.List();

·这里的ListSystem.Collections.Ilist,且是object[]类型的

分享到:
评论

相关推荐

    Hibernate_Criteria条件查询数据

    8. **子查询**:Criteria也支持子查询,可以将一个Criteria作为另一个Criteria的条件。这对于构建复杂的查询逻辑非常有用。 9. **动态Criteria**:动态Criteria允许在运行时动态地构造查询条件,适合于根据用户输入...

    Criteria标准化对象查询小例子

    Criteria API的主要优势在于它允许程序在运行时构造查询,这意味着可以在不硬编码SQL的情况下,根据业务逻辑的变化灵活地调整查询条件。这对于维护和扩展应用程序非常有用,特别是对于那些与多个数据库系统交互的...

    Hibernate-Criteria 模糊查询

    通过`Criteria`,可以创建、过滤和排序查询结果,同时支持多种查询条件和逻辑操作。 #### 模糊查询的实现 模糊查询通常用于当查询条件不精确时,例如用户可能只记得某部分信息,或者需要查找包含特定子串的记录。...

    Hibernate-Criteria_模糊查询

    Criteria API基于面向对象的方式进行查询构建,可以动态地添加各种查询条件,包括等值比较、范围查询、模糊查询等,使得查询操作更加直观和易于管理。 ### 模糊查询的意义 模糊查询是数据库操作中常见的一种需求,...

    Hibernate条件查询Criteria.doc

    Hibernate条件查询Criteria.docHibernate条件查询Criteria.doc

    hibernateCriteria查询

    #### 四、条件查询 ##### 1. 查询价格在50元以上的书籍 ```java Criteria criteria = session.createCriteria(Books.class); criteria.add(Restrictions.gt("price", 50.0)); List&lt;Books&gt; list = criteria.list();...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    ### Hibernat 使用Criteria查询多对多关系(SET集合)条件 #### 背景介绍与概念理解 在Java开发中,特别是在企业级应用中,持久化层的处理至关重要。Hibernate作为一款流行的Java持久化框架,它提供了一种非常简便...

    09 Criteria查询方式

    2. **添加限制条件**:使用Criteria的add()方法添加谓词,如EqRestriction(等于)、LeRestriction(小于等于)等,来定义查询的过滤条件。 3. **添加排序**:如果需要对结果进行排序,可以使用Criteria的...

    Hibernate中,利用Criteria查询容器实现sql的写法

    Criteria查询是Hibernate提供的一种灵活的查询方式,它可以让我们根据业务需求动态地构建查询条件。这种API的使用方法更加面向对象,减少了硬编码SQL的风险,同时提高了代码的可读性和可维护性。下面我们将通过几个...

    自定义查询框架Criteria

    其次 关联表很多 科研查询可以包括一百多条查询条件可自动配置。 但是mybatis肯定处理不了那么复杂的查询条件,条件与或非就够它折腾了。 条件必须可以自动生成,再网上找了相关资料,一种是领域驱动设计中的规约...

    Hibernate中关于Criteria查询条件的选择.doc

    `Expression.eq`是最基本的条件查询方法,用于添加一个等值条件。语法如下: ```java crit.add(Expression.eq("age", new Integer(24))); ``` 这里,“age”是数据库表中的字段名,而`new Integer(24)`是对应的值...

    Hibernate的Criteria用法总结.doc

    Hibernate 的 Criteria 是一个完全面向对象、可扩展的条件查询 API,通过它完全不需要考虑数据库底层如何实现、SQL 语句如何实现。Criteria 提供了灵活的查询条件组装方式,能够满足开发中复杂的查询需求。 一、...

    Hibernate中Criteria的完整用法

    **Criterion** 是Criteria查询条件的基础接口。它定义了如何设置查询条件,例如等价于(eq)、大于等于(ge)、范围(between)等。Criterion可以通过Restrictions工具类来创建,这个工具类提供了大量的静态方法用于...

    criteria介绍与使用

    在Hibernate框架中,`Criteria`提供了一种非常灵活且强大的查询机制,允许开发者构建复杂的查询条件,而无需编写HQL或SQL语句。本文将详细介绍`Criteria`的基本概念、使用方法以及其提供的各种功能特性。 #### ...

    Hibernate中Criteria的使用

    Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。

    Hibernate的Criteria文档

    `Criteria`接口提供了添加查询条件(`add(Criterion)`)、设置排序(`setOrder(Order)`)以及设置查询范围(`setFirstResult(int)`和`setMaxResults(int)`)等方法。 DetachedCriteria是Criteria的一个扩展,它允许...

    Hibernate中Criteria的完整用法.docx

    Hibernate 中 Criteria 的完整用法是 Hibernate 框架中的一种查询机制,允许开发者灵活地根据查询条件来组装查询语句。在使用 Spring 和 Hibernate 进行开发时,Criteria 的优势尤为明显。本文将对 Hibernate 中 ...

    Criteria hibernate

    Criteria查询是基于对象的,通过调用一系列方法来设置查询条件,这些条件在查询执行时被转化为对应的SQL语句。 2. **Criteria查询的基本构造** 要开始一个Criteria查询,首先需要获取到Session对象,然后调用...

Global site tag (gtag.js) - Google Analytics