Mybatis分页插件PageHelper

2023-12-14 21:50:45
  • PageHelper是什么?
    是MyBatis提供的分页插件,可以支持MySQL、Oracle等六种数据库。
    集成方式如下:

1 引入依赖

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.2</version>
</dependency>

2 在核心配置文件中配置分页插件

<plugins>
    <!-- 设置分页插件 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3 功能测试

package com.giser.mybatis.pagehelper;

import com.giser.mybatis.pagehelper.mapper.EmpMapper;
import com.giser.mybatis.pagehelper.pojo.Emp;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author giserDev
 * @description
 * @date 2023-12-07 23:41:44
 */
public class EmpMapperTest {

    /**
     * 分页插件的使用:
     * a>在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能
     *      pageNum:当前页的页码
     *      pageSize:每页显示的条数
     * b>在查询获取list集合之后,使用
     *      PageInfo<T> pageInfo = new PageInfo<>(List<T> list, int navigatePages)获取分页相关数据
     *          list:分页之后的数据
     *          navigatePages:导航分页的页码数
     * c>分页相关数据
     * 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:下一页的页码
     *
     * <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
     * <dependency>
     * <groupId>com.github.pagehelper</groupId>
     * <artifactId>pagehelper</artifactId>
     * <version>5.2.0</version>
     * </dependency>
     * <plugins>
     * <!--设置分页插件-->
     * <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
     * </plugins>
     *
     * isFirstPage/isLastPage:是否为第一页/最后一页
     * hasPreviousPage/hasNextPage:是否存在上一页/下一页
     * navigatePages:导航分页的页码数
     * navigatepageNums:导航分页的页码,[1,2,3,4,5]
     *
     */
    @Test
    public void testPageHelper(){
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

            int pageNum = 1;
            int pageSize = 3;
            // 开启分页
            PageHelper.startPage(pageNum, pageSize);

            List<Emp> empList = empMapper.queryEmpList();

            // 拦截器处理后,实际上会判断是否存在localPage,即调用startPage()方法就会有,存在则封装为Page对象返回
            if (empList instanceof Page<Emp>){
                Page<Emp> empPage = (Page<Emp>) empList;
                System.out.println(empPage);
            }

            // 也可以自行封装,此时可获取更多分页相关数据
            PageInfo<Emp> pageInfo = new PageInfo<>(empList, 5);
            System.out.println(pageInfo);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

文章来源:https://blog.csdn.net/SUNBOYmxbsH/article/details/134916325
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。