当前位置: 代码迷 >> J2EE >> getHibernateTemplate()分页有关问题
  详细解决方案

getHibernateTemplate()分页有关问题

热度:100   发布时间:2016-04-22 02:05:03.0
getHibernateTemplate()分页问题
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

------解决方案--------------------
mark 我使用第二种
------解决方案--------------------
使用第二种
------解决方案--------------------
习惯的第二种
------解决方案--------------------
使用第二种
------解决方案--------------------
第一种:每次翻页都要跑到后台执行一次,数据量多的话,用不了几次,服务器肯定挂掉。
还不如
return (List) getHibernateTemplate().find(
"from food where Cate=? and Category=? ",
new String[] { Cate ,Category})
一次取出所有结果,传到前台,使用前台分页(jquery或者其他技术),这样翻页也不会再跑到后台去执行查询,性能上会有很大提高,用户感觉也比较好。

第二种:正规传统做法。以下文章可参阅
http://www.javaeye.com/topic/261
------解决方案--------------------
第一种,直接和数据库操作,会在数据量大的时候,容易出现数据库拒绝连接的情况,性能和自己写JDBC没啥区别.

第二种,则优先从缓存中查找,这样不容易对数据库的连接数平凡递增,而且永远从内存中取数据是最快的...
------解决方案--------------------
能这样?
探讨
第一种:每次翻页都要跑到后台执行一次,数据量多的话,用不了几次,服务器肯定挂掉。
还不如
一次取出所有结果,传到前台,使用前台分页(jquery或者其他技术……

------解决方案--------------------
探讨
能这样?

引用:
第一种:每次翻页都要跑到后台执行一次,数据量多的话,用不了几次,服务器肯定挂掉。
还不如
一次取出所有结果,传到前台,使用前台分页(jquery或者其他技术……


我想知道,你的数据量多是有多少?
数据量少的时候一次性取出所有的结果还差不多。
数据多了,还一次拿出来。你自己去看看要多久时间,还用户体验好?
自己生成一些数……

------解决方案--------------------
使用第二种
------解决方案--------------------
推荐使用第二种,下面是它的三种可能:很实用的
Java code
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;    }        }
  相关解决方案