数据库sql语句:limit index,pageSize
index=(pageNum-1)*pageSize
totalPage = (count%pageSize==0)?(count/pageSize):(count/pageSize+1)
页数举例:
实现效果:
首页 上一页 2 3 4 5 6 下一页 末页
这里显示第四页的数据,对应的navigatePages为5
pom.xml
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>5.2.0version>
dependency>
mybatis-config.xml
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
plugins>
(放在
后面)
在查询功能之前使用
PageHelper.startPage(int pageNum, int pageSize)
开启分页功能
- pageNum:当前页的页码
- pageSize:每页显示的条数
在查询获取list集合之后,使用
PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)
获取分页相关数据(navigatePages:导航页面,在首页和尾页之间显示的页码数)
- list:分页之后的数据
- navigatePages:导航分页的页码数
分页相关的数据
PageInfo{pageNum=3, pageSize=2, size=2, startRow=5, endRow=6, total=8, pages=4, list=Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName=‘yuxinxuan’, gender=‘男’, deptId=10}, Emp2{empId=7, empName=‘yxx’, gender=‘男’, deptId=10}], prePage=2, nextPage=4, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=2, navigateLastPage=4, navigatepageNums=[2, 3, 4]}
- pageNum:当前页的页码
- pageSize:每页显示的条数
- size:当前页显示的真实条数
- total:总记录数
- pages:总页数
- prePage:上一页的页码
- nextPage:下一页的页码
- isFirstPage/isLastPage:是否为第一页/最后一页
- hasPreviousPage/hasNextPage:是否存在上一页/下一页
- navigatePages:导航分页的页码数
- navigatepageNums:导航分页的页码,[2, 3, 4]
MyBatisTest.java
@Test
public void testPage(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
Emp2Mapper emp2Mapper = sqlSession.getMapper(Emp2Mapper.class);
//开启分页设置pageNum(当前页码)为3,pageSize(每页条数)为2,自此开始到PageInfo后面的查询语句都会受到影响
Page<Object> page = PageHelper.startPage(3,2);
//设置查询条件
Emp2Example emp2Example = new Emp2Example();
emp2Example.createCriteria().andEmpNameLike("%y%");
//会在查询条件的基础上添加limit语句实现分页功能
List<Emp2> emp2List = emp2Mapper.selectByExample(emp2Example);
//pageInfo会保存分页相关的所有数据,可以通过调用其中的数据获取分页相关的数据(包含pager数据)
PageInfo<Emp2> pageInfo = new PageInfo<>(emp2List,3);//设置navigatePages为3
System.out.println(pageInfo);
//实现分页功能后page会保存当前页的所有数据在里面
System.out.println(page);
}
DEBUG 01-15 17:34:48,212 Cache Hit Ratio [SQL_CACHE]: 0.0 (LoggingCache.java:60)
DEBUG 01-15 17:34:48,275 ==> Preparing: SELECT count(0) FROM t_emp WHERE (emp_name LIKE ?) (BaseJdbcLogger.java:137)
DEBUG 01-15 17:34:48,306 ==> Parameters: %y%(String) (BaseJdbcLogger.java:137)
DEBUG 01-15 17:34:48,353 <== Total: 1 (BaseJdbcLogger.java:137)
DEBUG 01-15 17:34:48,353 ==> Preparing: select emp_id, emp_name, gender, dept_id from t_emp WHERE ( emp_name like ? ) LIMIT ?, ? (BaseJdbcLogger.java:137)
DEBUG 01-15 17:34:48,353 ==> Parameters: %y%(String), 4(Long), 2(Integer) (BaseJdbcLogger.java:137)
DEBUG 01-15 17:34:48,353 <== Total: 2 (BaseJdbcLogger.java:137)
PageInfo{pageNum=3, pageSize=2, size=2, startRow=5, endRow=6, total=8, pages=4, list=Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName='yuxinxuan', gender='男', deptId=10}, Emp2{empId=7, empName='yxx', gender='男', deptId=10}], prePage=2, nextPage=4, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=2, navigateLastPage=4, navigatepageNums=[2, 3, 4]}
Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName='yuxinxuan', gender='男', deptId=10}, Emp2{empId=7, empName='yxx', gender='男', deptId=10}]