前文,我们演示了物理分页的Sql实现方式,这种方式使得我们每次在编写查询服务时,不断的重复造轮子。这样的代码实现方式就显得十分的笨拙了。本文是Mybatis分页查询的最后一片内容,我们将介绍基于拦截器的,精巧的实现方式。在阅读这篇文章之前,强烈建议各位看官能够先阅读上文。这样就能对下文我们提及的各种对象及他们之间的关系有一个清晰的关系。好了,废话不多讲,开始我们的正文部分吧。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,SQLyog
-------------------------------------------------------------------------------------------------------------------------------------【本文只作为原理分析及简单分页功能实现。实际生产环节,建议各位读者选择已经广泛应用的第三方jar包或平台性支持的实现】
-------------------------------------------------------------------------------------------------------------------------------------
1.创建本文我们将使用的工程Mybatis12,工程结构图如下:【重点文件我们给出,其他配置文件请读者参考前文工程】
2.管理分页的对象PagePOJO的具体内容如下:【这里我们给出基本分页的示例,更多需求请读者自行完成】
[java] view
plain copy
- package com.csdn.ingo.entity;
- /**
- *@author 作者 E-mail:ingo
- *@version 创建时间:2016年4月27日下午6:27:05
- *类说明
- */
- public class PagePOJO {
- private int totalNumber;//当前表中总条目数量
- private int currentPage;//当前页的位置
- private int totalPage;//总页数
- private int pageSize;//页面大小
- private int startIndex;//检索的起始位置
- private int totalSelect;//检索的总数目
- //...省略其他set,get方法
- public void setTotalNumber(int totalNumber) {
- this.totalNumber = totalNumber;
- this.count();
- }
- //...省略其他set,get方法
- public PagePOJO(int totalNumber, int currentPage, int totalPage, int pageSize, int startIndex, int totalSelect) {
- super();
- this.totalNumber = totalNumber;
- this.currentPage = currentPage;
- this.totalPage = totalPage;
- this.pageSize = pageSize;
- this.startIndex = startIndex;
- this.totalSelect = totalSelect;
- }
- public void count(){
- int totalPageTemp = this.totalNumber/this.pageSize;
- int plus = (this.totalNumber%this.pageSize)==0?0:1;
- totalPageTemp = totalPageTemp+plus;
- if(totalPageTemp<=0){
- totalPageTemp=1;
- }
- this.totalPage = totalPageTemp;//总页数
- if(this.totalPage<this.currentPage){
- this.currentPage = this.totalPage;
- }
- if(this.currentPage<1){
- this.currentPage=1;
- }
- this.startIndex = (this.currentPage-1)*this.pageSize;//起始位置等于之前所有页面输乘以页面大小
- this.totalSelect = this.pageSize;//检索数量等于页面大小
- }
- }
[java] view
plain copy
- @Test
- public void testSelectPage() {
- try {
- // 创建分页对象
- //(int totalNumber, int currentPage, int totalPage, int pageSize, int startIndex, int totalSelect)
- PagePOJO page = new PagePOJO(5, 1, 1, 3, 1, 4);
- Map
params = new HashMap (); - params.put("page", page);
- UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);
- List
re = userInfo.selectByPage(params); - System.out.println(re);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-------------------------------------------------------------------------------------------------------------------------------------
上面与分页有关的,比较简单的内容我们先提供给大家。下面我们来详细的解释,拦截器实现分页的原理,各位看官睁大眼睛啊!
-------------------------------------------------------------------------------------------------------------------------------------
分页开始之前的问题: