分页插件PageHelper的使用

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
喜欢就支持一下吧
点赞0
分享
评论 抢沙发
墨初的头像-墨初小屋

昵称

取消
昵称表情代码图片