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>    <a>共${page.pages}页</a>    <a>当前第${page.pageNum}页</a>    <a>每页${page.pageSize}条</a>    <a href="showCar?uid=${sessionScope.user.uid}&page=1">首页</a>    <C:if test="${!page.isFirstPage}"> <a href="showCar?uid=${sessionScope.user.uid}&page=${page.prePage}">上一页</a>    </C:if> <C:if test="${page.isFirstPage}"> <a href="javascript:void(0);">上一页</a>    </C:if> <C:if test="${!page.isLastPage}"> <a href="showCar?uid=${sessionScope.user.uid}&page=${page.nextPage}">下一页</a>    </C:if> <C:if test="${page.isLastPage}"> <a href="#">下一页</a>    </C:if> <a href="showCar?uid=${sessionScope.user.uid}&page=${page.pages}">尾页</a>    PageHelper.startPage(page, 1); List<Goodsandcar> goodsandcars = goodsandcarMapper.findGoods(uid); PageInfo<Goodsandcar> pageInfo = new PageInfo<>(goodsandcars);
以上是关于limt和(pagehelper或者page分页插件)的区别的主要内容,如果未能解决你的问题,请参考以下文章
springboot多数据源动态切换和自定义mybatis件分页插
PageHelper分页异常(java.base/java.util.ArrayList cannot be cast to com.github.pagehelper.Page)