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
使⽤PageHelper插件进⾏分⻚,更加的便捷!
第一步:pom.xml中引入依赖
com.github.pagehelper pagehelper 5.3.1
第二步:在mybatis-config.xml⽂件中配置插件
第三步:编写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 */ ListselectAll(); }
三兄弟之二:CarMapper.xml文件,编写sql语句
使用了分页插件PageHelper就不需要使用limit关键字了,直接正常查询即可!
三兄弟之三: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); Listcars = 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。