十、MyBatis分页实现
10、1分页实现
在数据查询中,经常遇到大批量数据的查询,在显示过程中,为了缓解数据获取压力,也为了用户体验的提高,经常使用分页技术实现数据查询。常规分页查询主要使用SQL语句中的limit关键字进行查询。分页查询的核心数据主要包括:
- 总数据条数
- 每页显示条数
- 总页数
- 当前页数
通过这些核心数据,对数据尽心分割计算,实现分页。在MyBatis中,MyBatis给我们提供了快速分页的插件工具PageHelper
10、2pageHelper插件
pageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工。使开发者无需关心繁琐的分页配置,可以更专注于SQL语句的编写。
pageHelper官网:https://pagehelper.github.io/
pageHelper核心类:
- pageHelper:通过pageHelper的静态方法startPage,设置分页基本参数【常用设置为参数一:起始页码,参数二:每页行数】
- PageInfo:分页结果集,其中自动封装分页相关数据
PageInfo常用属性:
属性名称 | 属性内容 |
---|---|
PageInfo.list | 获取分页结果集 |
PageInfo.pageNum | 当前页码【startPage参数一】 |
PageInfo.pageSize | 每页条数【startPage参数二】 |
PageInfo.pages | 总页数 |
PageInfo.total | 数据总行数 |
PageInfo.prePage | 上一页 |
PageInfo.nextPage | 下一页 |
PageInfo.isFirstPage | 是否为第一页 |
PageInfo.isLastPage | 是否为最后一页 |
PageInfo.hasPreviousPage | 是否有上一页 |
PageInfo.hasNextPage | 是否有下一页 |
10、3配置pageHelper插件
pom.xml加载pageHelper资源
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
MyBatis核心配置文件添加pageHelper插件
<plugins>
<!-- 注意:分页插件 配置在通用mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 指定方言 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
注意:MyBatis核心配置文件的标签顺序
10、4pageHelper实现分页查询
后端代码实现分页初始化及查询
//获取页面中page属性,加载数据
String p=req.getParameter("page");
if(p==null||p.equals("")){
p="1";
}
int page=Integer.parseInt(p);
//通过PageHelper的startPage方法设置页码及每页条数
PageHelper.startPage(page,10);
//查询数据【此时的数据已经根据分页设置进行查询】
List<Book> list=bookDAO.findAll();
//创建PageInfo对象,将查询到的数据放置到PageInfo中
PageInfo<Book> pageInfo=new PageInfo<Book>(list);
req.setAttribute("list",pageInfo);
req.getRequestDispatcher("index.jsp").forward(req,resp);
前端代码实现数据展示及分页效果
<table>
<tr>
<th>编号</th>
<th>名称</th>
<th>价格</th>
</tr>
<c:forEach items="${list.list}" var="book">
<tr>
<td>${book.id}</td>
<td>${book.name}</td>
<td>${book.price}</td>
</tr>
</c:forEach>
<tr>
<td colspan="3">
<a href="show">首页</a>
<a href="show?page=${list.hasPreviousPage?list.prePage:1}">上一页</a>
<a href="show?page=${list.hasNextPage?list.nextPage:list.pages}">下一页</a>
<a href="show?page=${list.pages}">尾页</a>
<strong>当前第${list.pageNum}页,共${list.pages}页,总数据${list.total}条</strong>
</td>
</tr>
</table>