limt和(pagehelper或者page分页插件)的区别

Posted 穗余

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了limt和(pagehelper或者page分页插件)的区别相关的知识,希望对你有一定的参考价值。

limit

mysql当中的分页SQL应该怎么写?

①使用limit关键字,语法格式:limit startIndex,pageSize

②第⼀个数字:startIndex(起始下标,下标从0开始)

③第⼆个数字:pageSize(每⻚显示的记录条数)

④假设已知⻚码pageNum,还有每⻚显示的记录条数pageSize,那么第⼀个数字是可以动态的获取的:startIndex = (pageNum - 1) * pageSize

(3)标准通⽤的mysql分⻚SQL:

select * 
from tableName ...... 
limit (pageNum - 1) * pageSize, pageSize

Page是MybatisPlus的分页插件,使用简单,就不做介绍了。

PageHelper插件

使⽤PageHelper插件进⾏分⻚,更加的便捷!

第一步:pom.xml中引入依赖

<dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper</artifactId>
     <version>5.3.1</version>
</dependency>

第二步:在mybatis-config.xml⽂件中配置插件

<!--mybatis分页的拦截器-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

第三步:编写Java代码

三兄弟之一:CarMapper接口,编写方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CarMapper 
    /**
     * 查询所有的Car,通过分页查询插件PageHelper完成
     * @return
     */
    List<Car> selectAll();

三兄弟之二:CarMapper.xml文件,编写sql语句

使用了分页插件PageHelper就不需要使用limit关键字了,直接正常查询即可!

<?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.bjpowernode.mybatis.mapper.CarMapper"> 
  <select id="selectAll" resultType="Car">
      select * from t_car
  </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

注:在执行DQL语句之前,开启分页功能!

调用PageHelper的startPage(pageNum,pageSize)方法:

①第一个参数是页码pageNum

②第二个参数还是每页显示的记录条数pageSize

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest 
    @Test
    public void testSelectAll()
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 在执行DQL语句之前,开启分页
        int pageNum = 2; // 第二页
        int pageSize = 3; // 每页显示的条数
        PageHelper.startPage(pageNum,pageSize);
        List<Car> cars = mapper.selectAll();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    

执行结果:实际上PageHelper是在SQL语句后面自动加上了limit关键字

列举几个常用的属性:

①pageNum-页码, pageSize-每页显示的记录, size=3, startRow-从第几条数据开始, endRow-从第几条数据结束, total-总记录条数, pages-页数,

②prePage-上一页的页码, nextPage-下一页的页码, isFirstPage-,是否是第一页 isLastPage-是否是最后一页, hasPreviousPage-有没有上一页, hasNextPage-有没有下一页

③navigatePages-导航页码, navigateFirstPage-导航第一页是几, navigateLastPage-导航最后一页是几, navigatepageNums-存在数据的导航页

总结:

limit和分页插件本质是一个东西,只不过分页插件在查询语句后面添加了limit。

 

PageHelper分页工具

<a>共${page.total}件商品</a>&ensp;&ensp;&ensp;
<a>共${page.pages}页</a>&ensp;&ensp;&ensp;
<a>当前第${page.pageNum}页</a>&ensp;&ensp;&ensp;
<a>每页${page.pageSize}条</a>&ensp;&ensp;&ensp;
<a href="showCar?uid=${sessionScope.user.uid}&page=1">首页</a>&ensp;&ensp;&ensp;

<C:if test="${!page.isFirstPage}">
<a href="showCar?uid=${sessionScope.user.uid}&page=${page.prePage}">上一页</a>&ensp;&ensp;&ensp;
</C:if>

<C:if test="${page.isFirstPage}">
<a href="javascript:void(0);">上一页</a>&ensp;&ensp;&ensp;
</C:if>

<C:if test="${!page.isLastPage}">
<a href="showCar?uid=${sessionScope.user.uid}&page=${page.nextPage}">下一页</a>&ensp;&ensp;&ensp;
</C:if>
<C:if test="${page.isLastPage}">
<a href="#">下一页</a>&ensp;&ensp;&ensp;
</C:if>

<a href="showCar?uid=${sessionScope.user.uid}&page=${page.pages}">尾页</a>&ensp;&ensp;&ensp;



PageHelper.startPage(page, 1);
List<Goodsandcar> goodsandcars = goodsandcarMapper.findGoods(uid);

PageInfo<Goodsandcar> pageInfo = new PageInfo<>(goodsandcars);

 

以上是关于limt和(pagehelper或者page分页插件)的区别的主要内容,如果未能解决你的问题,请参考以下文章

clickhouse pageHelper分页

springboot多数据源动态切换和自定义mybatis件分页插

PageHelper分页工具

PageHelper分页异常(java.base/java.util.ArrayList cannot be cast to com.github.pagehelper.Page)

laypage不足一页不显示分页怎么办

mybatis pagehelper 怎么求出总页数