1。  我想用这种形式的 应该也可以达到分页效果
     不知道性能怎么样 return (List) getHibernateTemplate().find(
"from food  where Cate=?  and Category=? ",
new String[] { Cate  ,Category}).subList(Start, end);
      这个不知道是不是将有所记录查找出来 然后再取  subList(Start, end);
      如果是这样那性能应该不高。2。另一个是使用这种形式的
   final String hql = "from PublicMessageTable where publicMessageColumnId=? order by pubDate desc";
   List listTable = getHibernateTemplate().executeFind(new HibernateCallback() {
       public Object doInHibernate(Session session)
         throws HibernateException, SQLException {
         Query query = session.createQuery(hql);
         query.setInteger(0, publicMessageColumnId.intValue());
         query.setFirstResult(start);
         query.setMaxResults(length);
         List list = query.list();
         return list;
       }
   });
   return listTable;
}不知道他们有什么区别, 请高人帮看看  谢谢
希望能详细的说一下 再次感谢各位i

解决方案 »

  1.   

    第一种:每次翻页都要跑到后台执行一次,数据量多的话,用不了几次,服务器肯定挂掉。
    还不如
    return (List) getHibernateTemplate().find(
    "from food where Cate=? and Category=? ",
    new String[] { Cate ,Category})
    一次取出所有结果,传到前台,使用前台分页(jquery或者其他技术),这样翻页也不会再跑到后台去执行查询,性能上会有很大提高,用户感觉也比较好。第二种:正规传统做法。以下文章可参阅
    http://www.javaeye.com/topic/261
      

  2.   

    第一种,直接和数据库操作,会在数据量大的时候,容易出现数据库拒绝连接的情况,性能和自己写JDBC没啥区别.第二种,则优先从缓存中查找,这样不容易对数据库的连接数平凡递增,而且永远从内存中取数据是最快的...
      

  3.   

    推荐使用第二种,下面是它的三种可能:很实用的public class PageHibernateDaoSupport extends HibernateDaoSupport {

    /**
     * 使用hql 语句进行分页查询操作
     * @param hql 需要查询的hql语句
     * @param offset 第一条记录索引
     * @param pageSize 每页需要显示的记录数
     * @return 当前页的所有记录
     */
    @SuppressWarnings("unchecked")
    public List findByPage(final String hql, 
     final int offset, final int pageSize)
    { List list = getHibernateTemplate().executeFind(new HibernateCallback()
    {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException
    {
    List result = session.createQuery(hql)
     .setFirstResult(offset)
                     .setMaxResults(pageSize)
     .list();
    return result;
    }
    });
    return list;
    }
    /**
     * 使用hql 语句进行分页查询操作
     * @param hql 需要查询的hql语句
     * @param value 如果hql有一个参数需要传入,value就是传入的参数
     * @param offset 第一条记录索引
     * @param pageSize 每页需要显示的记录数
     * @return 当前页的所有记录
     */
    @SuppressWarnings("unchecked")
    public List findByPage(final String hql , final Object value ,
     final int offset, final int pageSize)
    { List list = getHibernateTemplate().executeFind(new HibernateCallback()
    {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException
    {
    List result = session.createQuery(hql)
             .setParameter(0, value) 
     .setFirstResult(offset)
                     .setMaxResults(pageSize)
     .list();
    return result;
    }
    });
    return list;
    }
    /**
     * 使用hql 语句进行分页查询操作
     * @param hql 需要查询的hql语句
     * @param values 如果hql有多个个参数需要传入,values就是传入的参数数组
     * @param offset 第一条记录索引
     * @param pageSize 每页需要显示的记录数
     * @return 当前页的所有记录
     */
    @SuppressWarnings("unchecked")
    public List findByPage(final String hql, final Object[] values,
     final int offset, final int pageSize)
    { List list = getHibernateTemplate().executeFind(new HibernateCallback()
    {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException
    {
    Query query = session.createQuery(hql);
    for (int i = 0 ; i < values.length ; i++)
    {
    query.setParameter( i, values[i]);
    }
    List result = query.setFirstResult(offset)
                   .setMaxResults(pageSize)
       .list();
    return result;
    }
    });
    return list;
    }

    }
      

  4.   

    #11楼
        我用的是你的最后一个方法,但是在 query.setParameter( i, values[i]);
    的时候,会报类型转换异常,