分页查询
1,介绍
1.1.作用
浪费服务器带宽
防止数据过多一下子全部显示
1.2.数据
数据、总数据数、当前页、当前条数、上页、下页、总页、首页
1.3.分类
假分页:
一次性查询所有存入内存 翻页从内存中获取数据 优点: 实现简单,性能高 缺点:内容溢出
真分页:
每次翻页从数据库中查询数据 优点: 不容造成内存溢出 缺点: 实现复杂 性能相对低
2.实现
数据和总数据数通过当前页和条数查询数据库得知
一开始没有携带分页查询的参数需要默认{ 当前页 && 条数 }
表现层需要接收用户传递过来的数据
因为Mybatis只能接收一个参数:需要将用户的数据封装成对象;
思路
访问流程:
表现层:
接收请求参数 当前页currentPage和每页条数pageSize
创建QueryObject对象qo封装分页查询参数
通过调用业务对象.分页查询方法(qo)获取结果集pageRusult
请求对象.setAttribute("pageRusult",结果集)
转发到JSP;
业务层:
结果集封装页面显示的数据:
currentPage,pageSize,totalCount,List<T>data,totalPage,prevPage,nextPage
QueryObject封装的分页查询参数:
currentPage,pageSize,getStart()//获取分页数据开始的索引
创建结果集对象 pageRusult
调用query方法接收QueryObject对象qo封装的分页查询参数
获取totalCount通过持久层查询产品数量的方法
获取当前页数据的集合list通过持久层查询当前页的数据
根据接收qo对象封装的 currentPage 和 pageSize
计算总页数据 totalPage ,上一页 prevPage,下一页 nextPage
把以上获取的数据封装到 pageRusult 对象中 返回结果集给表现层
持久层:
调用int selectForCount(QueryObject对象)
通过数据库sql语句 select count(*) from 表名 获取表的数据总条数totalCount
调用List<实体类> selectForList(QueryObject对象) 获取封装的当前页currentPage和每页条数pageSize数据
通过QueryObject类封装的 getStart() 方法获取每页开始的索引 start 为 (currentPage - 1) * pageSize
通过数据库sql语句 select * from 表名 limit #{start} , #{pageSize} 获取每页的数据