PageHelper是Mybatis拦截器的一个应用,实现分页查询,支持常见的 12 种数据库的物理分页并支持多种分页方式,相对自己写分页来说可以说省时省力。
接下来记录一下PageHelper的使用步骤
1.添加依赖
<!--分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
2.配置分页插件
直接在Mybatis的核心配置文件中配置插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 分页合理化参数,pageNum<=0时查询第一页,超过总数时查询最后一页 -->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
如果使用Spring整合Mybatis的话也可以在Spring配置文件中配置
<!-- 配置用于创建SqlSessionFactory的工厂bean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
关于后面这种配置方法如果有疑问可以参考SSM整合那篇文章
3.分页插件的使用
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public PageInfo<Employee> getEmployeePage(Integer pageNum) {
PageHelper.startPage(pageNum, 8);
List<Employee> list = employeeMapper.getEmployeePage();
PageInfo<Employee> page = new PageInfo<>(list, 5);
return page;
}
}
① PageHelper.startPage(int pageNum, int pageSize):
在查询功能之前开启分页功能,pageNum:当前页的页码,pageSize:每页显示的条数。
② PageInfo pageInfo = new PageInfo<>(List list, int navigatePages):
在查询获取list集合之后,获取分页相关数据,list:分页之后的数据,navigatePages:导航分页的页码数。
4.分页相关数据
PageInfo{
pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8,
list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, pages=8, reasonable=false, pageSizeZero=false},
prePage=7, nextPage=0, isFirstPage=false, isLastPage=true,
hasPreviousPage=true, hasNextPage=false,
navigatePages=5, navigateFirstPage4, navigateLastPage8, navigatepageNums=[4, 5, 6, 7, 8] }
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]
5.前端获取分页数据
<table>
<tr>
<th colspan="6">员工列表</th>
</tr>
<tr>
<th>empId</th>
<th>empName</th>
<th>age</th>
<th>gender</th>
<th>email</th>
<th>operation</th>
</tr>
<tr th:each="employee,status : ${page.list}">
<td th:text="${employee.empId}"></td>
<td th:text="${employee.empName}"></td>
<td th:text="${employee.age}"></td>
<td th:text="${employee.gender}"></td>
<td th:text="${employee.email}"></td>
<td>
<a href="">delete</a>
<a href="">update</a>
</td>
</tr>
<tr>
<td colspan="6">
<span th:if="${page.hasPreviousPage}">
<a th:href="@{/employee/page/1}">首页</a>
<a th:href="@{'/employee/page/'+${page.prePage}}">上一页</a>
</span>
<span th:each="num : ${page.navigatepageNums}">
<a th:if="${page.pageNum==num}" th:href="@{'/employee/page/'+${num}}" th:text="'['+${num}+']'"
style="color:red;"></a>
<a th:if="${page.pageNum!=num}" th:href="@{'/employee/page/'+${num}}" th:text="${num} "></a>
</span>
<span th:if="${page.hasNextPage}">
<a th:href="@{'/employee/page/'+${page.nextPage}}">下一页</a>
<a th:href="@{'/employee/page/'+${page.pages}}">末页</a>
</span>
</td>
</tr>
</table>
注:th: Thymeleaf
6.最终显示效果
首页 上一页 2 3 4 5 6 下一页 末页
© 版权声明
文章版权归作者所有,转载请注明来源。
THE END
喜欢就支持一下吧