我想要实现分页查询,用的是Hibernate 4,方法原型如下:     /**
      * 分页获取所有模型对象
       * @param pn 页码 从1开始
       * @param pageSize 每页记录数
       * @return
      */
     public List<User> listAll(int pn, int pageSize);

解决方案 »

  1.   

    Criteria criteria = this.getSession().createCriteria(
    Class.forName(this.getEntity()));
    if (object != null) {
    criteria.add(Example.create(object).enableLike());
    }
    int rowCount = (Integer) criteria.setProjection(Projections.rowCount())
    .uniqueResult();
    criteria.setProjection(null);
    criteria.setFirstResult((pageNo - 1) * pageSize);
    criteria.setMaxResults(pageSize);
    List result = criteria.list();
      

  2.   

    criteria.setProjection(null);
    criteria.setFirstResult((pageNo - 1) * pageSize);
    自己看对应的api说明。
      

  3.   

    hibernate有方法设置起始条数和所查数据的条数,就这两个criteria.setFirstResult((pageNo - 1) * pageSize);criteria.setMaxResults(pageSize);
      

  4.   

    那我能不能像下面这样写:Query query = sessionFactory.getCurrentSession().createQuery("form User");
    query.setFirstResult(pn);
    query.setMaxResults(pageSize);
    return query.list();
      

  5.   

    hibernate的分页就这么简单
    看看我这篇文章:
    http://blog.csdn.net/qq183293/article/details/7884127
      

  6.   

    给我分吧2个函数 一个是查询数据库总行数
    一个是计算从哪行开始查询 和一次查询多少行
    我刚用hiernate4 做的完整代码public class PagingDaoHibernate implements PagingDao { // 定义sessionfactory对象
    private SessionFactory sessionFactory; /**
     * @param sessionFactory
     *            注入sessionfactory
     */
    public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
    } /* (non-Javadoc)
     * @see esw.led.dao.PagingDao#queryForPage(java.lang.String, int, int)
     * @param hql 查询数据库
     * @param offset 从第几行查询数据库
     * @param length 查询多少行数据
     */
    @Override
    public List queryForPage(String hql, int offset, int length) {
    // TODO Auto-generated method stub
    // 初始化事务
    Transaction tx = null;
    List list = null;
    // 实例化session
    Session session = sessionFactory.getCurrentSession();
    try {
    // 实例化事务
    tx = session.getTransaction();
    // 开始事务
    tx.begin();
    // 执行sql文 login
    Query q = getSession().createQuery(hql); 
    q.setFirstResult(offset);
    q.setMaxResults(length);
    list = q.list(); tx.commit(); } catch (Exception e) {
    e.printStackTrace();
    // 如果事务失败 回滚
    if (tx != null && tx.isActive()) {
    try {
    // 回滚
    tx.rollback();
    } catch (HibernateException e1) {
    e1.printStackTrace();
    }
    }
    }
    return list; } /* (non-Javadoc)
     * @see esw.led.dao.PagingDao#getAllRowCount(java.lang.String)
     * 
     * 
     * @param hql_count 查询数据库中一共有多少行数据
     */
      public Session getSession() {
             
            //事务必须是开启的(Required),否则获取不到
            return sessionFactory.getCurrentSession();
        }
    //查询一共多少数据
    public long getAllRowCount(String hql_count) {
    // 实例化session
    long count = 0 ;
    Session session = sessionFactory.getCurrentSession();

    Transaction tx = null;
    try {
    // 实例化事务
    tx = session.getTransaction();
    // 开始事务
    tx.begin();
            Query query = getSession().createQuery(hql_count); 
           
      
             List list = query.list();
             count=(Long)query.list().get(0);
              tx.commit(); } catch (Exception e) {
    e.printStackTrace();
    // 如果事务失败 回滚
    if (tx != null && tx.isActive()) {
    try {
    // 回滚
    tx.rollback();
    } catch (HibernateException e1) {
    e1.printStackTrace();
    }
    }
    } return count;
    }
    }
    这个是dao层的 
    再看看这篇文章 http://wenku.baidu.com/view/7eaa66ee998fcc22bcd10d89.html
    service 层要计算的
      

  7.   

    可以的,
    也可以这样子getSession().createQuery("***").setFirstResult(from).setMaxResults(maxCols).list()
      

  8.   

    #4 得分:0 回复于: 2013-03-04 13:55:02 
    criteria.setProjection(null);
    criteria.setFirstResult((pageNo - 1) * pageSize);
    自己看对应的api说明。 
      

  9.   

    Query q = session.createQuery(hql);
    q.setFirstResult(begin);
    q.setMaxResult(maxNumber);
    q.list();