NO.10 MyBatis分页插件

目录

1、前言

2、 添加分页依赖和插件

2.1 添加分页依赖

2.2 配置分页插件

 3、分页插件的使用

3.1 PageHelper.startPage使用以及各个属性说明

3.1.1 基本概念

3.1.2 属性说明

3.1.3 其他使用技巧

3.2 PageInfo中各个属性说明

3.3 分页流程

4、测试方法完整代码:


1、前言

本篇所涉及的操作基于NO.08 MyBatis创建逆向工程_qq_46053741的博客-优快云博客

所创建的逆向工程 

2、 添加分页依赖和插件

在使用分页插件功能之前需要导入分页所需要的依赖和分页插件。

2.1 添加分页依赖

在pom.xml文件中添加pagehelper依赖:

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.2.0</version>
</dependency>
<dependency>
  <groupId>com.github.jsqlparser</groupId>
  <artifactId>jsqlparser</artifactId>
  <version>3.2</version>
</dependency>

2.2 配置分页插件

在MyBatis的核心配置文件中添加分页插件

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

 3、分页插件的使用

3.1 PageHelper.startPage使用以及各个属性说明

3.1.1 基本概念

PageHelper是MyBatis分页插件,在查询数据时,可以自动将结果封装成分页信息其中,startPage是PageHelper的一个重要方法。PageHelper.startPage()方法的作用是将接下来的一条SQL查询语句进行分页处理,查询结果会被自动封装成Page类型对象,其中包含了分页需要的全部信息,包括当前页码、每页显示数量、总记录数、总页数等。实际上,PageHelper进行分页处理的原理是使用MyBatis的拦截器技术,在查询语句的前后插入相应的代码,从而实现自动分页。

3.1.2 属性说明

1. pageNum

pageNum参数表示当前页码,必须传入一个大于0的整数值。它是分页查询中最基本的参数。如果pageNum的值小于1,则会被默认设置为1,即查询第一页。

2. pageSize

pageSize参数表示每页显示数量,必须传入一个大于0的整数值。它决定了每一页显示的数据条数。如果pageSize的值小于1,则会被默认设置为10,即每页显示10条数据。

3. count

count参数表示是否进行总数count查询,默认为true。如果count为true,则在执行分页查询前会额外进行一次count查询,用于统计总记录数。如果count为false,则不进行总数count查询,分页信息中的total字段为-1。这个参数的作用是控制查询的效率,如果不需要total值的话,可以将该参数设置为false。

例如:


  // 不进行总数count查询
  PageHelper.startPage(pageNum, pageSize, false);

4. reasonable

reasonable参数表示是否进行合理化分页,默认为false。如果reasonable为true,则pageNum参数小于1时将查询第一页,pageNum参数大于总页数时将查询最后一页。如果reasonable为false,则会抛出异常

例如:


  // 进行合理化分页
  PageHelper.startPage(pageNum, pageSize, true);

5. pageSizeZero

pageSizeZero表示是否将pageSize=0时查询所有结果(相当于没有执行分页查询),默认值为false。如果pageSizeZero为true,则在pageSize=0时会查询所有结果,而不是返回空集合。这个参数的作用是在某些特殊场景下使用,比如需要查询所有结果来进行某些统计运算的情况。

例如:


  // pageSize=0时查询所有结果
  PageHelper.startPage(pageNum, 0, true).setPageSizeZero(true);

3.1.3 其他使用技巧

1. 排序功能

PageHelper还提供了排序的功能,可以在分页查询时进行排序,格式为“order by 字段名”,多个排序可以用逗号隔开。具体使用方法如下:


  PageHelper.orderBy("id DESC");
  // 查询操作
  ministerMapper.selectByExample(ministerExample);

2. RowBounds方式分页

除了startPage方式外,PageHelper还支持RowBounds方式的分页,用于对不支持分页插件的情况下的分页查询。具体使用方法如下:


  // 创建RowBounds对象
  RowBounds rowBounds = new RowBounds(offset, limit);
  // 查询操作
  List<Minister> list = ministerMapper.selectByExampleWithRowbounds(ministerExample, rowBounds);

3.2 PageInfo中各个属性说明

    private int pageNum;      //当前页的页码
    private int pageSize;      //每页的数量
    private int size;            //当前页的数量

    //可以在页面中"显示startRow到endRow 共size条数据"
    private int startRow; //当前页面第一个元素在数据库中的行号
    private int endRow;//当前页面最后一个元素在数据库中的行号
    
    private long total;     //总记录数
    private int pages;       //总页数
    private List<T> list;      //结果集
    
    private int prePage;    //上一页
    private int nextPage;   //下一页
    
    private boolean isFirstPage;   //是否为第一页
    private boolean isLastPage;   //是否为最后一页
    private boolean hasPreviousPage;       //是否有前一页
    private boolean hasNextPage;          //是否有下一页
    
    private int navigatePages;          //导航页码数
    private int[] navigatepageNums;       //所有导航页号
    private int navigateFirstPage;       //导航条上的第一页
    private int navigateLastPage;     //导航条上的最后一页

3.3 分页流程

在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能,其中pageNum参数表示当前页的页码, pageSize参数表示每页显示的条数。

//开启分页功能
Page<Object> page=PageHelper.startPage(2,7);

查询获取list集合

//获得全部人员信息
List<Minister> list=ministerMapper.selectByExample(null);

使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据 ,其中list参数表示分页之后的数据 ,navigatePages参数表示导航分页的页码数

//获取分页相关数据
PageInfo<Minister> pageInfo=new PageInfo<Minister>(list,3);

4、测试方法完整代码:

    @Test
    public void PageTest() {
        SqlSession sqlSession= JdbcUtiles.getSqlSession();
        MinisterMapper ministerMapper=sqlSession.getMapper(MinisterMapper.class);
        //目标:查询所有人员信息.显示第二页的人员信息
        //开启分页功能
        Page<Object> page=PageHelper.startPage(2,7);
        System.out.println("page信息------>"+page);
        //获得list集合
        List<Minister> list=ministerMapper.selectByExample(null);
        System.out.println("list信息------>"+list);
        //获取分页相关数据
        PageInfo<Minister> pageInfo=new PageInfo<Minister>(list,3);
        System.out.println("pageInfo信息------>"+pageInfo);
        JdbcUtiles.closeSqlSession(sqlSession);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值