来源:http://www.cnblogs.com/Terrylee/archive/2006/04/12/372823.html

一.HQL简单介绍
HQL全名是Hibernate Query Language,它是一种完全面向对象的查询语言。

1.from 子句

from UserInfo

from UserInfo as userinfo

from UserInfo  userinfo

UserInfo:是类名称,而不是[ActiveRecord(Table = "UserInfo")]中指定的UserInfo

2.select 子句

select Name,Author from Blog
也可以使用elements函数来查询一个集合
select elements(blog.Posts) from Blog blog

3.使用聚合函数
HQL中也可以使用一些聚合函数
select count(*) from Blog blog
select count(elements(blog.Posts)) from Blog blog
HQL支持的聚合函数有
avg(...),sum(...),min(...),max(...),count(*),count(...), count(distinct ...), count(all...)

4.Where子句
from Blog blog where blog.Name = 'test'
from Blog blog where blog.Name is not null

//根据标题 模糊查询
public static ThemeInfo[] FindBySubject(string _content)
{
SimpleQuery query = new SimpleQuery(typeof(ThemeInfo), @"from ThemeInfo themeInfo where themeInfo.Subject like ?", "%" + _content + "%");
return (ThemeInfo[])ExecuteQuery(query);
}

5.自定义查询

在实际开发中,我们所面对的查询远不止上面所说得这么简单,有时候我们需要处理一些自定义的参数,或者执行自定义的查询语句,这时需要我们编写自定义的ActiveRecord查询。

首先要添加一个类,让它继承于基类ActiveRecordBaseQuery,并覆写CreateQuery()方法(或者实现IactiveRecordQuery接口),如下例所示:

using Castle.ActiveRecord;
using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Models
{
public class QueryWithNamedParameters : ActiveRecordBaseQuery
{
private string _Name = null;
private int _maxResults = 2; public QueryWithNamedParameters()
: base(typeof(UserInfo))
{ } public string Name
{
get { return _Name; }
set { _Name = value; }
} public int MaxResults
{
get { return _maxResults; }
set { _maxResults = value; }
} protected override IQuery CreateQuery(ISession session)
{
String hql = "from UserInfo userinfo";
if (!string.IsNullOrEmpty(_Name))
{
hql += " where userinfo.Name like :author";//设置查询语句
} IQuery q = session.CreateQuery(hql);
if (!string.IsNullOrEmpty(_Name))
{
q.SetString("author", "%" + _Name + "%");//设置查询参数
}
q.SetMaxResults(_maxResults);
return q;
}
}
}

  

使用:

//自定义查询
public static ArrayList GetThreeEntityByName(string Name)
{
QueryWithNamedParameters q = new QueryWithNamedParameters();
q.Name = Name;
q.MaxResults = 3;
return (ArrayList)ExecuteQuery(q);
} //自定义查询
StringBuilder htmlStr3 = new StringBuilder();
ArrayList list3 = Models.UserInfo.GetThreeEntityByName("jay"); foreach (Models.UserInfo item in list3)
{
htmlStr3.Append("      编号:" + item.ID + " 名称:" + item.Name + "<br />");
}
Literal4.Text = htmlStr3.ToString();

  

6.使用CallBack自定义查询

/// <summary>
/// 通过CallBack执行
/// </summary>
/// <param name="author"></param>
/// <returns></returns>
public static UserInfo[] GetUserByName(string Name)
{
return (UserInfo[])Execute(typeof(UserInfo), new NHibernateDelegate(GetDataByNameCallback), Name);
} private static object GetDataByNameCallback(ISession session, object instance)
{
// 创建查询
IQuery query = session.CreateQuery("from UserInfo userinfo where userinfo.Name like :author"); // 设置参数
query.SetString("author", "%" + Convert.ToString(instance) + "%"); // 获取结果
IList results = query.List(); // 转化结果为Array
UserInfo[] users = new UserInfo[results.Count];
results.CopyTo(users, 0); // 返回结果
return users;
}

  

调用:

//自定义查询2
StringBuilder htmlStr4 = new StringBuilder();
Models.UserInfo[] list4 = Models.UserInfo.GetUserByName("jay"); foreach (Models.UserInfo item in list4)
{
htmlStr4.Append("      编号:" + item.ID + " 名称:" + item.Name + "<br />");
}
Literal5.Text = htmlStr4.ToString();

  

7.如果不使用HQL语句查询,可以配置使用Sql查询:

SimpleQuery<RecruitmentInfo> query = new SimpleQuery<RecruitmentInfo>(QueryLanguage.Sql,hql,paras[]);

如果需要查询前几条 sql:select top 10 * from TableName;hql使用:query.SetQueryRange(BeginIndex, PageSize);//设置从哪一条开始,读取多少条

Castle ActiveRecord学习(五)使用HQL语句查询的更多相关文章

  1. Castle ActiveRecord学习实践

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务. ...

  2. hql语句查询实体类采用list方法的返回结果集

    在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...

  3. hql语句查询

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  4. Castle ActiveRecord学习(三)数据映射及特性描述

    Model中的Demo: using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using System; using Syste ...

  5. 使用Query进行HQL语句查询和SQL语句查询

    HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是“fro ...

  6. Castle ActiveRecord学习(六)数据验证

    参考.来源:http://www.cnblogs.com/Terrylee/archive/2006/04/13/374173.html https://github.com/castleprojec ...

  7. Castle ActiveRecord学习(二)配置、引用、程序启动

    来源:http://www.cnblogs.com/zxj159/p/4082987.html 配置数据库驱动: Model层引用:Castle.ActiveRecord.dll.NHibernate ...

  8. Castle ActiveRecord学习(一)简介

    简介 来源:http://www.cnblogs.com/zxj159/p/4082987.html 一.Active Record(活动记录)模式 Active Record是业务逻辑层中(< ...

  9. Castle ActiveRecord学习(四)延迟加载、分页查询、where条件

    一.延迟加载 //用户发布的主题,一对多:Table:外键表:ColumnKey:外键:Lazy:延迟加载:Cascade:级联操作(级联删除) [HasMany(typeof(ThemeInfo), ...

随机推荐

  1. 【BZOJ】1101 [POI2007]Zap(莫比乌斯反演)

    题目 传送门:QWQ 分析 莫比乌斯反演. 还不是很熟练qwq 代码 //bzoj1101 //给出a,b,d,询问有多少对二元组(x,y)满足gcd(x,y)=d.x<=a,y<=b # ...

  2. kudu和kudu-impala的安装流程

    安装apache的kudu 第一步:下载rpm包 http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5.11.0/RPMS/x86_64/ 第 ...

  3. 中国Linux开源镜像站大全

    本文来源:各大开源软件.发行版镜像页面.       请注意这是一个总结,如果您自己搭建了一个小型开源镜像,这里并没有.以下列出的是包含大量不同镜像的站点.       具体配置中,我建议您使用大企业 ...

  4. html大小写问题

    js中变量名,函数,关键字都区分大小写,如var i;和var I;是两个不同的变量. css中定义的元素名称不区分大小写的. html中,标签和标签属性统一使用小写形式,固有属性也一律使用小写,自定 ...

  5. HTML(具体代码看笔记本)

    参考:https://www.cnblogs.com/liwenzhou/p/7988087.html 一, HTML   1. HTML结构   2. 标签    1. 块儿级标签     h1~h ...

  6. Executor框架(七)Future 接口、FutureTask类

    Future接口介绍   Future 表示异步计算的结果.它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果.   Future 一般由 ExecutorService 的submi ...

  7. 暴搜 - Codeforces Round #327 (Div. 2) E. Three States

    E. Three States Problem's Link Mean: 在一个N*M的方格内,有五种字符:'1','2','3','.','#'. 现在要你在'.'的地方修路,使得至少存在一个块'1 ...

  8. svn+apache+ssl快速部署

    在svn+apache文章中已经成功搭建了web-svn,由于在http网络上数据都是以明文传输,公司的源码需要一定的保密机制,基于安全考虑现整合web-svn+ssl.构建安全的svn服务器, 1. ...

  9. json小知识

    json转换新方法 上面是把一个json数组转换成map集合 fromObject()是通用的 map集合,bean对象,String转换成json 文件转换成字符串,在转换成json 生成json文 ...

  10. SQL 2012 分页取数据

    ,), data int ) select * from t1 row rows only create clustered index t1c on t1(id) declare @i int ) ...