高级分页查询

本项目基于之前的高级查询项目,结合了高级查询和分页查询,同时解决了参数提交的问题。使用了谷歌分页查询算法,最后放上源码。

分页的两种设计方式:

1.假分页:将所有的数据从数据库中查询出来放在内存中(List 集合)

翻页直接从集合中截取指定条数的数据
第一页:索引 0~9:list.get(索引)
第二页:索引 10~19:list.get(索引)
....................
问题:当数据量较大的时候,可能造成内存溢出(严重)
好处:操作速度较快

2.真分页:每次从数据库中查询指定数量的数据

select * from product limit beginIndex, pageSize
beginIndex= (currentPage-1)*pageSize;
第一页:select * from product limit 0,10
第二页:select * from product limit 10,10
.......................
问题:查询较慢(忽略)
好处:不会造成内存溢出

分页查询中的数据分析

标准的分页数据包含以下几个:

  • 需要显示的数据:listData
  • 总条数:totalCount
  • 当前页:currentPage
  • 总页数:totalPage
  • 上一页:prePage
  • 下一页:nextPage
  • 页面大小:pageSize

页面中数据的来源:

  • 用户传递的数据:pageSize 、currentPage
  • 通过查询得到的数据:listData、totalCount、
  • 计算得来的数据:totalPage、prePage、nextPage

高级查询 + 分页查询

页面上的参数:

  • 高级查询的参数:ProductQueryObject
  • 分页的参数:currentPage,pageSize

//在DAO中,高级查询+分页查询方法的设计
PageResult pageQuery(ProductQueryObject qo,Integer currentPage,Integer pageSize);

//上面的设计中,参数较多,所以可以将高级查询和分页查询的参数合并到一起:ProductQueryObject

ProductQueryObject{
    Integer currentPage;
    Integer pageSize;
}

因为所有的查询对象都需要分页相关的信息,所以将分页相关的参数封装到查询对象的基类中:QueryObject对象

执行相关数据的查询操作:查询结果集数据:select * from product + qo.getConditions() + limit ?,?

合并高级查询和分页查询需要的参数:
高级查询的参数:List<Object> params = qo.getParams();
分页的参数:qo.getCurrentPage(); qo.getPageSize();
将分页相关的参数丢到params集合中

查询总条数:select count(*) from product + qo.getConditions()
只需要高级查询的参数:qo.getParams();
JdbcTemplate.q uery(sql,handler, 参数)

解决翻页丢失高级查询参数的问题

问题:在点击翻页的时候,只提交了当前页的数据到服务器,所以,在后台中拼接sql的条件的参数丢失了,所以此时的sql:select * from product limit ?,?

解决思路:在点击翻页的时候,应该将高级查询的参数一起提交到服务器,,,怎么提交????

解决方案:1.将当前页的数据先放到高级查询的表单中(一个隐藏域),此时在表单中就拥有了高级查询的参数和分页相关的参数;2.提交表单

使用JavaScript来解决(死记)

<script type="text/javascript">
    /*定义一个方法*/
    function goPage(currentPage) {
        //将当前页的数据设置给表单中的隐藏域
        document.getElementById("currentPage").value = currentPage;
        //提交表单(获取到当前页面的第一个表单元素,然后调用submit方法)
        document.forms[0].submit();
    }
</script>

调用js中的函数:

<a href="javascript:goPage(1)">首页</a>

项目源码:AdvancedPageQuery.zip

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注