Hibernate HQL查询详解:模糊查询与对象关系映射

需积分: 10 2 下载量 64 浏览量 更新于2024-08-17 收藏 135KB PPT 举报
该资源主要介绍了在NHibernate中使用HQL(Hibernate Query Language)进行条件查询,特别是模糊查询的方法。HQL是面向对象的查询语言,与SQL类似但操作持久化对象,支持继承、多态和关联等特性。 在HQL中进行模糊查询,有以下几种常见方式: 1. 检索姓名以特定字符开始的User对象:例如,要找到所有以字母"T"开头的User对象,可以编写如下HQL语句: ```java String hql = "From TUser as t where t.name like 'T%'"; ``` 这里的`'T%'`是一个通配符,`%`代表任意数量的任意字符。 2. 检索姓名中包含特定子串的User对象:如果要找到所有名字中包含字符串"om"的User对象,HQL语句如下: ```java String hql = "From TUser as t where t.name like '%om%'"; ``` 在这里,`'%om%'`表示"om"可以出现在名字的任何位置。 3. 检索特定字符开头,并且满足特定长度的User对象:比如找所有以"T"开头且长度为3的User对象,HQL语句如下: ```java String hql = "From TUser as t where t.name like 'T__'"; ``` 在这种情况下,两个下划线`__`代表两个任意字符。 HQL不仅限于模糊查询,还包括其他多种查询方式: - **条件查询**:根据指定条件筛选对象,例如,根据年龄大于某个值的条件来查询用户。 - **连接查询**:通过JOIN操作将多个表或类关联起来查询,如一对多、多对多关系的查询。 - **分组查询**:使用GROUP BY子句对查询结果进行分组,通常结合聚合函数(如COUNT, SUM, AVG等)一起使用。 - **聚焦查询**(聚合查询):例如,找出用户中最大或最小的年龄。 - **子查询**:在主查询中嵌套一个或多个查询,用于更复杂的逻辑判断。 在实际应用中,HQL通常依赖于`Query`类,通过它来执行查询并获取结果集。例如,创建一个`Query`实例,设置参数,然后调用`find`方法执行查询并转换结果到指定的集合类型。 例如,对于一对一关系的查询,假设有一个`TDepartment`类,其ID为`long`类型,可以使用以下HQL查询语句获取ID为指定值的部门对象: ```java String hql = "from TDepartment as t where t.id = ?"; IList<TDepartment> list = this.find(hql, id); ``` 而对于一对多或多对多关系的查询,例如部门与岗位的关系,可以通过查询岗位来获取其对应的部门: ```java String hql = "select t.department from TGangWeiXiShu as t where t.id = ?"; ``` 对于多对多关系,如用户与角色,可以查询用户对应的所有角色,或者通过角色查询所有关联的用户。 HQL提供了一种强大的、面向对象的方式来处理数据库查询,使得在NHibernate框架中操作数据更加方便和灵活。