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
一.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
相关文章推荐
- C#.Net Castle ActiveRecord学习实践(7):使用HQL查询
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
- IOS学习笔记32—使用Storyboard实现复杂界面
- Castle ActiveRecord学习实践(7):使用HQL查询
- 使用json实现查询条件传回Action进行hql语句拼接查询实现在结果中查询功能在datagrid中显示查询结果
- 关于在Spring下 使用HQL 语句模糊查询的实现方法
- Castle ActiveRecord学习实践(7):使用HQL查询
- OpenLayers学习笔记6——使用jQuery UI实现查询并标注(功能实现篇)
- hibernate 中HQL语句查询学习笔记一
- sql语句学习笔记(9)-使用top查询指定行数(从30行至40行)
- OS学习笔记32—使用Storyboard实现复杂界面
- Castle ActiveRecord学习实践(7):使用HQL查询
- IOS学习笔记32—使用Storyboard实现复杂界面
- php学习笔记(二十三)PDO的预处理语句的查询以及结果集的使用
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
- IOS学习笔记32—使用Storyboard实现复杂界面
- IOS学习笔记32—使用Storyboard实现复杂界面
- php学习笔记(二十三)PDO的预处理语句的查询以及结果集的使用
- 使用HQL语句方式实现多表多条件组合模糊查询
- [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存