`

Criteria select

阅读更多

最近开始学习用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返回列表

分享到:
评论

相关推荐

    Hibernate中Criteria的完整用法

    String hql = "select s.name ,avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]&gt; list = query.list(); ``` 这个HQL语句会返回每个学生名字及其平均年龄的列表。...

    Hibernate中Criteria的用法

    String hql = "select s.name ,avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); list = query.list(); ``` 在上面的代码中,我们首先创建了一个 HQL 查询字符串,然后使用 `...

    hibernate criteria的使用方法

    String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]&gt; list = query.list(); ``` 此处使用 HQL 查询平均年龄,并按名字分组。 - **...

    Hibernate-Criteria 模糊查询

    这实际上就是将SQL语句“`SELECT * FROM t_user WHERE name='Erica' AND sex=1`”进行了面向对象的封装。 #### 三、模糊查询概述 模糊查询通常指的是在查询时使用类似于“%”这样的通配符来匹配不完全确定的字符串...

    条件类Criteria的用法.pdf

    《条件类Criteria在STM32开发中的应用及详解》 在STM32的软件开发中,数据查询操作是不可或缺的一部分,特别是在处理复杂关联关系的数据时。条件类Criteria提供了一种面向对象的方式来构建和执行数据库查询,它使得...

    条件类Criteria的用法.docx

    在IT领域,尤其是在Java开发中,使用ORM框架如Hibernate时,条件类Criteria是进行动态查询的重要工具。Criteria API提供了一种面向对象的方式来构建SQL查询,它允许开发者在运行时动态地构建查询条件,无需手动编写...

    Hibernate Criteria

    当执行`criteria.list()`时,Hibernate会根据Criteria中的条件动态生成相应的SQL语句,比如`SELECT * FROM user WHERE name='zx' AND age=27`。 综上所述,Hibernate Criteria提供了一种强大的、面向对象的查询机制...

    symfony Model Criteria

    在Symfony框架的应用中,_criteria_ 对象可与peer类的方法结合使用,比如 doSelect()、doSelectOne()、doSelectJoinXXX()、doSelectJoinAll()以及 retrieveByPk() 等,实现对数据库的查询操作。 在Symfony框架中...

    hibernateCriteria的使用.docx

    String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]&gt; list = query.list(); ``` 此查询将返回每个学生名字及对应的平均年龄。 5. 本地SQL...

    Hibernate中的查询:HQL、Criteria、原生SQl

    String sql = "SELECT * FROM USER"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class); List&lt;User&gt; users = query.list(); ``` 原生SQL查询可以返回结果集、单个值或自定义的结果类型...

    Yii模型操作之criteria查找数据库的方法

    - 可以通过`select`属性来指定查询结果中需要的字段,例如`$criteria-&gt;select = 'id, title, content, author, status, createtime'`。 3. **添加查找条件**: - 使用`addCondition()`方法可以添加额外的条件,如...

    前端开源库-waterline-criteria.zip

    9. **计算属性**:通过`select()`或`attributes`可以控制返回的字段,`count()`用于统计数量。 了解了Waterline的查询准则后,开发者可以更灵活地根据业务需求构建复杂的查询。通过使用Waterline,我们可以减少对...

    hibernate3.2 (十)HQL查询

    2. 子查询:可以在HQL中嵌套查询,例如`select u from User u where u.id in (select a.userId from Address a where a.city='上海')`,找出所有有上海地址的用户。 3. 排序:使用`order by`子句可以对查询结果进行...

    Hibernate 查询经典练习题

    在本文中,我们将探讨基于Hibernate的查询实践,包括HQL(Hibernate Query Language)和Criteria API的使用。我们将通过两个经典的练习题来深入理解这两个查询方式,并讨论它们在处理不同查询需求时的特点。 ### ...

    \Hibernate_query条件查询

    Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.gt("age", 30)); List&lt;User&gt; users = criteria.list(); ``` `Restrictions.gt`方法表示大于条件,`"age"`是属性名。 3. ...

    lyaprosen.rar_The First_exp

    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 ...

    hibernate查询

    5. **子查询**: 在HQL中可以嵌套查询,如`select e from Employee e where e.age &gt; (select avg(age) from Employee)`查找年龄高于平均值的员工。 **三、Criteria查询** 1. **创建Criteria**: 通过`SessionFactory...

    浪磬J2EE第一期 Hibernate专题 第六讲 检索方式

    这些方法包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)、Criteria API以及直接使用Session的get()和load()方法。 1. HQL(Hibernate Query Language) HQL是Hibernate专有的面向对象的查询语言...

    ASP中使用SQL语句教程.doc

    SELECT what FROM whichTable WHERE criteria; ``` 上述语句将创建一个包含查询结果的新记录集。 2. **在ASP中使用SELECT 语句** 在ASP脚本中,需要将SQL语句封装成字符串形式,并赋值给一个变量,例如: ```...

Global site tag (gtag.js) - Google Analytics