最近开始学习用NHibernate,在分页显示的时候遇到了麻烦,用Criteria返回分页记录的时候不知道该如何取得记录的总数,用
hibernate也有这个问题,网上搜索了一下,发现提这个问题的人也不少,但是解决的办法却几乎差不多,基本上都说用另一条select
count(*) 或者用 select count(Id) 来查询记录总数,可是在要动态传入参数的时候构造
HQL查询语句感觉很麻烦,有没有什么更好的办法呢?NHibernate的资料不多,最后只好在Nhibernate手册中查找,发现其实在
Criteria中可以通过调用SetProjection()来进行count查询,我想知道这个的人应该很多,可是在分页中该怎么具体应用估计可能就
不多了吧,因为在找到的解决方法里面基本上就没看见,呵呵。现在记录下来,以备以后参考。
/// <summary>
/// 返回文章列表
/// </summary>
/// <param name="userId">文章Id</param>
///<param name="categoryId">分类 Id</param>
/// <param name="sortFiled">排序字段</param>
/// <param name="direction">排序方向</param>
/// <param name="currentPageIndex">当前页码</param>
/// <param name="pageSize">每页大小</param>
/// <param name="recordCount">返回记录总数</param>
/// <returns>IList列表</returns>
public IList Getarticles(int userId,int categoryId, string
sortFiled,bool direction, int currentPageIndex, int pageSize, out int
recordCount)
{
ICriteria criteria=DataAccess.Criteria( typeof( MovieUrl ) )
.Add( Expression.Eq("UserId",userId ) )
.Add( Expression.Eq( "CategoryId", categoryId ));
//获取记录总数
recordCount = Convert.ToInt32(criteria.SetProjection( Projections.Count(MovieUrl.__ID ))
.UniqueResult( ));
criteria.SetProjection( null );
//设置排序
criteria.AddOrder( new Order( sortField, direction) )
//设置分页
criteria.SetFirstResult( (currentPageIndex.Value-1) * pageSize.Value )
.SetMaxResults( pageSize.Value );
return criteria.List( );
}
上面代码关键 criteria.SetProjection( null );这一句,这样就可以不用手动组装返回记录总数的HQL语句,在利用Criteria返回记录总数后再利用同一个Criteria返回列表
分享到:
相关推荐
String hql = "select s.name ,avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]> list = query.list(); ``` 这个HQL语句会返回每个学生名字及其平均年龄的列表。...
String hql = "select s.name ,avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); list = query.list(); ``` 在上面的代码中,我们首先创建了一个 HQL 查询字符串,然后使用 `...
String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]> list = query.list(); ``` 此处使用 HQL 查询平均年龄,并按名字分组。 - **...
这实际上就是将SQL语句“`SELECT * FROM t_user WHERE name='Erica' AND sex=1`”进行了面向对象的封装。 #### 三、模糊查询概述 模糊查询通常指的是在查询时使用类似于“%”这样的通配符来匹配不完全确定的字符串...
《条件类Criteria在STM32开发中的应用及详解》 在STM32的软件开发中,数据查询操作是不可或缺的一部分,特别是在处理复杂关联关系的数据时。条件类Criteria提供了一种面向对象的方式来构建和执行数据库查询,它使得...
在IT领域,尤其是在Java开发中,使用ORM框架如Hibernate时,条件类Criteria是进行动态查询的重要工具。Criteria API提供了一种面向对象的方式来构建SQL查询,它允许开发者在运行时动态地构建查询条件,无需手动编写...
当执行`criteria.list()`时,Hibernate会根据Criteria中的条件动态生成相应的SQL语句,比如`SELECT * FROM user WHERE name='zx' AND age=27`。 综上所述,Hibernate Criteria提供了一种强大的、面向对象的查询机制...
在Symfony框架的应用中,_criteria_ 对象可与peer类的方法结合使用,比如 doSelect()、doSelectOne()、doSelectJoinXXX()、doSelectJoinAll()以及 retrieveByPk() 等,实现对数据库的查询操作。 在Symfony框架中...
String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]> list = query.list(); ``` 此查询将返回每个学生名字及对应的平均年龄。 5. 本地SQL...
String sql = "SELECT * FROM USER"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class); List<User> users = query.list(); ``` 原生SQL查询可以返回结果集、单个值或自定义的结果类型...
- 可以通过`select`属性来指定查询结果中需要的字段,例如`$criteria->select = 'id, title, content, author, status, createtime'`。 3. **添加查找条件**: - 使用`addCondition()`方法可以添加额外的条件,如...
9. **计算属性**:通过`select()`或`attributes`可以控制返回的字段,`count()`用于统计数量。 了解了Waterline的查询准则后,开发者可以更灵活地根据业务需求构建复杂的查询。通过使用Waterline,我们可以减少对...
2. 子查询:可以在HQL中嵌套查询,例如`select u from User u where u.id in (select a.userId from Address a where a.city='上海')`,找出所有有上海地址的用户。 3. 排序:使用`order by`子句可以对查询结果进行...
在本文中,我们将探讨基于Hibernate的查询实践,包括HQL(Hibernate Query Language)和Criteria API的使用。我们将通过两个经典的练习题来深入理解这两个查询方式,并讨论它们在处理不同查询需求时的特点。 ### ...
Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.gt("age", 30)); List<User> users = criteria.list(); ``` `Restrictions.gt`方法表示大于条件,`"age"`是属性名。 3. ...
to orders 10 to select proper embedding lag(tau). The proper lag is the lag before of first decline of autocorrelation value below exp(-1)=0.367879441.For data with nonlinear dependency ...
5. **子查询**: 在HQL中可以嵌套查询,如`select e from Employee e where e.age > (select avg(age) from Employee)`查找年龄高于平均值的员工。 **三、Criteria查询** 1. **创建Criteria**: 通过`SessionFactory...
这些方法包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)、Criteria API以及直接使用Session的get()和load()方法。 1. HQL(Hibernate Query Language) HQL是Hibernate专有的面向对象的查询语言...
SELECT what FROM whichTable WHERE criteria; ``` 上述语句将创建一个包含查询结果的新记录集。 2. **在ASP中使用SELECT 语句** 在ASP脚本中,需要将SQL语句封装成字符串形式,并赋值给一个变量,例如: ```...