您的位置:首页 > 其它

Castle学习笔记----使用HQL语句实现复杂查询

2007-12-05 14:19 836 查看
在ActiveRecord中实现稍微复杂的一点的查询,我们就不能用使用Find(id),FindAll()这两个静态的方法了,这时就需要使用HQL语句来实现,在平常使用Castle的时候我想大家都注意到在ActiveRecordBase类下,由于只提供了Find(id),FindAll()这样两个静态的查询方法,这两个方法在我们查询中还远远不够,仍然不能解决实际开发中一些复杂的查询,这方面ActiveRecord为我们提供了HQL语言的支持。

一.HQL语句介绍

HQL全名是Hibernate Query Language,它是一种完全面向对象的查询语言。我门先来看一下HQL最基本的一些用法(类似SQL):

From子句-------->如:From Name,也可取别名,如:From Name as name,也可省略as,如:From Name name.

Select子句----->如:Select Name from TableName.

Where子句--->如:From TableName as tn where tn.Name is not null.

使用聚合函数-->如:Select * From Table as t.

......

更多HQL用法请参考相关资料,这里不作详细介绍。

二.使用示例

要使用HQL语句来进行一系列的查询前需先引用:Castle.ActiveRecord.Queries;在Queries类下封装有HqlBaseQuery以及派生于他的CountQueryScalarQuery,SimpleQuery类。

示例代码:用户类(Users)和新闻类(News)

1[ActiveRecord("Users")]

2public class Users:ActiveRecordBase

3[ActiveRecord("News")]

2public class News:ActiveRecordBase

3private void Form1_Load(object sender, EventArgs e)

2private void DataBindGridView()

6public static int RecordCount()

2public static IList<News> FindByTitle(string title)

7{

8 SimpleQuery query=new SimpleQuery(typeof(News),"From News as n where n.Title like ?","%"+title+"%");

9  return (IList<News>)ExecuteQuery(query);

10}
  章节限制,关于or,between * and *等操作就不另做介绍.出了用HQL语句外,Castle还封装了NHibernate的表达式,通过表达式来查询数据我个人认为效果更好,至少比用HQL方便.

  然而在实际的项目开发中我门所面临的查询远远不止是上面这么简单,出了上面这些查询操作外,Castle的查询基类是一个抽象类public abstract class ActiveRecordBaseQuery,用户可以通过继承他来实现自定义查询.或者实现查询

接口public interface IActiveRecordQuery;然后从写其方法object Execute(NHibernate.ISession session);具体实现我将在下一篇文章中介绍.

相信通过HQL查询可以解决我们开发中的绝大多数的复杂查询问题,如果结合NHibernate表达式使用更为灵活。文中部门内容来自网上共享资料,部门内容是个人意见,如发现有类似文章或相同内容纯属巧合.技术在于交流.

官方参考资料


Castle的官方网站http://www.castleproject.org
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐