一文彻底搞懂Mybatis系列(十七)之MyBatis使用分页插件PageHelper

简介: 一文彻底搞懂Mybatis系列(十七)之MyBatis使用分页插件PageHelper

一、关于mysql的分页说明

1、mysql当中的分页sql需要使用limit关键字。

2、limit 语法格式:

limit startIndex,pageSize

startIndex :开始下标

pageSize:显示的记录条数

select * from t car limit 0, 3;

mysql当中起始行的下标从0开始。第一条记录的下标是0

3、计算下标

假设每页显示3条记录:

第1页:limit 0,3 (012)

第2页:limit 3,3 (345)

第3页:limit 6,3(678)

第4页:limit 9,3 (910 11)

假设每页显示pageSize条记录,第pageNum页,使用limit表示:

limit (pageNum-1)*pageSize,pageSize

4、小细节

select * from t car limit 2; 和 select * from t car limit 0,2;是等效的。

二、MyBatis使用分页插件PageHelper

1、引入分页插件pagehelper的依赖

<!--分页插件pagehelper-->
      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>5.3.1</version>
      </dependency>

2、mybatis-cofig.xml配置mybatis分页的拦截器

plugin interceptor="com.github.pagehelper.PageInterceptor"

完整配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties"/>
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.powernode.mybatis.pojo" />
    </typeAliases>
    <!--mybatis分页的拦截器-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">             </plugin>
    </plugins>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.powernode.mybatis.mapper"/>
    </mappers>
</configuration>

3、pojo类Clazz

public class Clazz implements Serializable {
    private Integer cid;
    private String name;
    ......此处省略get、set方法
}

4、ClazzMapper 接口

public interface ClazzMapper {
    List<Clazz> selectAll();
}

5、ClazzMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.powernode.mybatis.mapper.ClazzMapper">
    <select id="selectAll" resultType="Clazz">
        select * from t_clazz
    </select>
</mapper>

6、测试类趴一下

记得在查询sql之前,加上这句PageHelper.startPage(pageNum,pageSize);相当于开启PageHelper,否则分页不会生效。

@Test
    public void testAll(){
        SqlSession sqlSession = SqlSessionUtil.openSqlSession();
        ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class);
        int pageNum = 2;
        int pageSize = 2;
        PageHelper.startPage(pageNum,pageSize);
        List<Clazz> clazzes = mapper.selectAll();
        clazzes.forEach(e-> System.out.println(e));
        sqlSession.close();
    }

运行结果

如果需要更加详细的信息,可以使用PageInfo对象来处理:

PageInfo pageInfo = new PageInfo<>(clazzes,4)

@Test
    public void testAll(){
        SqlSession sqlSession = SqlSessionUtil.openSqlSession();
        ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class);
        int pageNum = 2;
        int pageSize = 2;
        PageHelper.startPage(pageNum,pageSize);
        List<Clazz> clazzes = mapper.selectAll();
        PageInfo<Clazz> pageInfo = new PageInfo<>(clazzes,4);
        System.out.println(pageInfo);
        sqlSession.close();
    }

运行结果,会有非常详细的分页查询信息

PageInfo{pageNum=2, pageSize=2, size=2, startRow=3, endRow=4, total=10, pages=5, list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=10, pages=5, reasonable=false, pageSizeZero=false}[Clazz{cid=1003, name='高三三班', stus=null}, Clazz{cid=1004, name='高三四班', stus=null}], prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=4, navigateFirstPage=1, navigateLastPage=4, navigatepageNums=[1, 2, 3, 4]}


目录
打赏
0
0
0
0
5
分享
相关文章
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
27 0
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
MyBatis篇-分页
本文介绍了多种分页方式,包括自带rowbound内存分页、第三方插件pagehelper(通过修改SQL实现分页)、SQL分页(依赖limit或rownum等关键字)、数组分页(先查询全部数据再用subList分页)、拦截器分页(自定义拦截器为SQL添加分页语句)。最后总结了逻辑分页(内存分页,适合小数据量)和物理分页(直接在数据库层面分页,适合大数据量)的优缺点,强调物理分页优先于逻辑分页。
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
32 0
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
125 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
263 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
6月前
|
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
169 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
1255 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等