MyBatis学习笔记之使用PageHelper

这玩意是为了帮助分页的

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

分页逻辑

用户会发送请求,携带页码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);
<!-- CarMapper.xml -->
    <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.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.3.1</version>
        </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();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优降宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值