查询数据库时,如果满足条件的记录很多,该如何返回给页面?
1.客户端分页
同样地,使用html/javascript等技术处理。甚至可以封装成组件
2.服务器端分页
非常重要的,在实际项目中非常需要————性能问题。
这需要结合JDBC/Hibernate/TopLink/EJB等技术实现。
查询分页
1)一次性从数据库中查出所有信息,在内存中作分页(缓存)
特点:速度非常快,消耗资源大(内存?)
2)分多次查询数据库,一次查询的数据量就是一个页面可以显示的数据量
特点:消耗资源少,相对来说速度慢
3)折衷的方案(一次只取n页,1<n<总页数)(部分缓存)
特点:中庸之道(实现中,置换算法教难)
常见的分页处理方法:定义如下几个参数
rows:数据库表中记录总行数 select count(*) from 表名;
size:每页显示的记录数目 可定制,可写死
totalPage:总页数 (导出属性:可以由其他属性计算而得) int totalPage = (rows-1) / size + 1; 这个公式可以考虑了整除与否
curPageNo:当前页, 客户端决定 ,默认是1
startRowNo:当前页在数据库中的起始行号(导出属性) int startRowNo = (curPageNo -1 ) * size;
jsp页面一般都有:[首页]【上一页】1 2 3 4 5 6 7 8 9 10【下一页】[尾页]
后台需要知道的就是从数据库的第几行开始取,取多少行?(也就是startRowNo和size)
startRow可以通过用户点击的数字和size计算出来,这样后台只需要这两个参数就可以了
这样后台就能查到所需要的数据集,返回给前台显示
Hiberante中经常有如下语句:
query.setFirstResult((nowPage - 1) * pageSize);
query.setMaxResults(pageSize);