MyBatis学习笔记之使用PageHelper

文章目录

  • 分页逻辑
  • limit分页
    • 使用limit获取分页数据
    • PageHelper插件
    • 获取PageInfo对象

这玩意是为了帮助分页的

分页就是数据量太大了,放在一页里太长了,分为好多页

分页逻辑

用户会发送请求,携带页码pageNum给服务器

每页显示的记录条数:pageSize,例如百度默认就是每页展示10条记录

实际上每一次在进行分页请求发送的时候,都是要发送两个数据的。


前端提交表格的话,数据格式:
uri?pageNum=1&pageSize=10


那么关于mysql当中的分页sql应该如何编写?limit关键字。
limit语法格式:
limit 开始下标, 显示的记录条数
limit startIndex, pageSize

select * from t_car limit 0, 3;
select * from t_car limit 2;等效于select * from t_car limit 0, 2;


limit分页

mysql的limit后面两个数字:

  • 第一个数字:startIndex(起始下标,下标从0开始)
  • 第二个数字:pageSize(每页显示的记录条数)
    假设已知页码pageNum,还有每页显示的记录条数pageSize,第一个数字可以动态获取嘛?
  • startIndex = (pageNum - 1)*pageSize
    所以,标准通用的mysql分页SQL:

假设每页显示三条记录
第一页:limit 0, 3(0,1,2)
第二页:limit 3, 3(3,4,5)
第三页:limit 6, 3(6,7,8)
第四页:limit 9, 3(9,10,11)

假设每页显示pageSize条记录:
第pageNum页:limit (pageNum - 1)*pageSize, pageSize

使用limit获取分页数据

//CarMapper.java
List<Car> selectAll(@Param("startIndex")int startIndex,@Param("pageSize")int pageSize);

    <select id="selectAll" resultType="Car">
        select
            *
        from
            t_car
        limit
            #{startIndex},#{pageSize}
    select>
//test
    @Test
    public void test(){
        int pageSize = 3;
        int pageNum = 2;
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAll((pageNum - 1) * pageSize, pageSize);
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }

PageHelper插件

老规矩,pom文件插依赖

        <dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelperartifactId>
            <version>5.3.1version>
        dependency>

mybatis-config核心配置文件配置插件

注意plugins插入的位置顺序

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">plugin>
    plugins>

代码调试

//CarMapper.java
List<Car> selectAll2();
//CarMapper.xml
    <select id="selectAll2" resultType="Car">
        select * from t_car
    select>
//test文件
    @Test
    public void test2(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);

        int pageSize = 3;
        int pageNum = 2;
        PageHelper.startPage(pageNum,pageSize);
        List<Car> cars = mapper.selectAll2();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }

获取PageInfo对象

封装分页信息对象new PageInfo()
PageInfo对象是PageHelper插件提供的,用来封装分页相关信息的对象
在里面还能获取导很多其他的数据,比如说上一页,下一页什么的

    @Test
    public void test2(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);

        int pageSize = 3;
        int pageNum = 2;
        PageHelper.startPage(pageNum,pageSize);
        List<Car> cars = mapper.selectAll2();
        PageInfo<Car> carPageInfo = new PageInfo<>(cars, 3);
        System.out.println(carPageInfo);
        sqlSession.close();
    }

你可能感兴趣的:(mybatis学习笔记,mybatis,学习,笔记)