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没啥区别.
第二种,则优先从缓存中查找,这样不容易对数据库的连接数平凡递增,而且永远从内存中取数据是最快的...
[解决办法]
能这样?
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; } }
[解决办法]
我一直都用的是第二种 看了LZ的后 觉得第一种很不错
[解决办法]
#11楼,代码很清楚,不过我觉得你的2,3可以合成一个用么, 数组里边一个,多个,0个都可以吧
[解决办法]
顶 个