MyBatis分页插件PageHelper如何使用
导读:本文共4642.5字符,通常情况下阅读需要15分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: MyBatis使⽤PageHelper1.limit分⻚(1)概念:①页码:pageNum(用户会发送请求,携带页码pageNum给服务器)②每页显示的记录条数:pageSize,例如:百度默认的是每页展示10条记录③实际上每一次在进行分页请求发送的时候,都是要发送两个数据:pageNum和pageSize给服务器④实际上前端提交表单的数据格式应如下:uri?p... ...
目录
(为您整理了一些要点),点击可以直达。MyBatis使⽤PageHelper
1.limit分⻚
(1)概念:
①页码:pageNum(用户会发送请求,携带页码pageNum给服务器)
②每页显示的记录条数:pageSize,例如:百度默认的是每页展示10条记录
③实际上每一次在进行分页请求发送的时候,都是要发送两个数据:pageNum和pageSize给服务器
④实际上前端提交表单的数据格式应如下:uri?pageNum=1&pageSize=10,后端调用request.getParameter方法获取到对应的页码和每页显示的记录条数
(2)mysql当中的分页SQL应该怎么写?
①使用limit关键字,语法格式:limit startIndex,pageSize
②第⼀个数字:startIndex(起始下标,下标从0开始)
③第⼆个数字:pageSize(每⻚显示的记录条数)
④假设已知⻚码pageNum,还有每⻚显示的记录条数pageSize,那么第⼀个数字是可以动态的获取的:startIndex = (pageNum - 1) * pageSize
(3)标准通⽤的mysql分⻚SQL:
select*fromtableName......limit(pageNum-1)*pageSize,pageSize
(4)使用limit关键字编写代码进行分页
三兄弟之一:CarMapper接口,编写方法
packagecom.bjpowernode.mybatis.mapper;importcom.bjpowernode.mybatis.pojo.Car;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceCarMapper{/***分页查询*@paramstartIndex起始下标*@parampageSize每页显示的记录条数*@return*/List<Car>selectAllByPage(@Param("startIndex")intstartIndex,@Param("pageSize")intpageSize);}
三兄弟之二:CarMapper.xml文件,编写sql语句
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.bjpowernode.mybatis.mapper.CarMapper"><selectid="selectAllByPage"resultType="Car">select*fromt_carlimit#{startInde},#{pageSize}</select></mapper>
三兄弟之三:CarMappeTest类,用来编写测试类
packagecom.bjpowernode.mybatis.test;importcom.bjpowernode.mybatis.mapper.CarMapper;importcom.bjpowernode.mybatis.pojo.Car;importcom.bjpowernode.mybatis.utils.SqlSessionUtil;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;publicclassCarMapperTest{@TestpublicvoidtestSelectAllByPage(){//应该是从前端获取到页码intpageNum=2;//应该是从前端获取到每页显示的条数intpageSize=2;//起始下标intstartIndex=(pageNum-1)*pageSize;SqlSessionsqlSession=SqlSessionUtil.openSession();CarMappermapper=sqlSession.getMapper(CarMapper.class);List<Car>cars=mapper.selectAllByPage(startIndex,pageSize);cars.forEach(car->System.out.println(car));sqlSession.close();}}
执行结果:
对应的是数据库表中:起始下标为2开始的后两条数据(下标从0开始)
(5)其实获取数据并不难,难的是获取分⻚相关的数据⽐较难(例如:总记录条数、是否有上/下一页、分页的导航显示多少个);这些可以借助mybatis的PageHelper插件。
2.PageHelper插件
使⽤PageHelper插件进⾏分⻚,更加的便捷!
第一步:pom.xml中引入依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version></dependency>
第二步:在mybatis-config.xml⽂件中配置插件
<!--mybatis分页的拦截器--><plugins><plugininterceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>
第三步:编写Java代码
三兄弟之一:CarMapper接口,编写方法
packagecom.bjpowernode.mybatis.mapper;importcom.bjpowernode.mybatis.pojo.Car;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceCarMapper{/***查询所有的Car,通过分页查询插件PageHelper完成*@return*/List<Car>selectAll();}
三兄弟之二:CarMapper.xml文件,编写sql语句
使用了分页插件PageHelper就不需要使用limit关键字了,直接正常查询即可!
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.bjpowernode.mybatis.mapper.CarMapper"><selectid="selectAll"resultType="Car">select*fromt_car</select></mapper>
三兄弟之三:CarMappeTest类,用来编写测试类
注:在执行DQL语句之前,开启分页功能!
调用PageHelper的startPage(pageNum,pageSize)方法:
①第一个参数是页码pageNum
②第二个参数还是每页显示的记录条数pageSize
packagecom.bjpowernode.mybatis.test;importcom.bjpowernode.mybatis.mapper.CarMapper;importcom.bjpowernode.mybatis.pojo.Car;importcom.bjpowernode.mybatis.utils.SqlSessionUtil;importcom.github.pagehelper.PageHelper;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;publicclassCarMapperTest{@TestpublicvoidtestSelectAll(){SqlSessionsqlSession=SqlSessionUtil.openSession();CarMappermapper=sqlSession.getMapper(CarMapper.class);//在执行DQL语句之前,开启分页intpageNum=2;//第二页intpageSize=3;//每页显示的条数PageHelper.startPage(pageNum,pageSize);List<Car>cars=mapper.selectAll();cars.forEach(car->System.out.println(car));sqlSession.close();}}
执行结果:实际上PageHelper是在SQL语句后面自动加上了limit关键字
第2页,每页显示的条数是3,对应的数据库表中的数据就是:
第四步:获取PageInfo对象
关键点:
①在查询语句之前,开启分⻚功能。
②在查询语句之后,封装PageInfo对象(PageInfo对象将来会存储到request域当中。在⻚⾯上展示)
packagecom.bjpowernode.mybatis.test;importcom.bjpowernode.mybatis.mapper.CarMapper;importcom.bjpowernode.mybatis.pojo.Car;importcom.bjpowernode.mybatis.utils.SqlSessionUtil;importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;publicclassCarMapperTest{@TestpublicvoidtestSelectAll(){SqlSessionsqlSession=SqlSessionUtil.openSession();CarMappermapper=sqlSession.getMapper(CarMapper.class);//1.在执行DQL语句之前,开启分页intpageNum=1;//第一页intpageSize=3;//每页显示的条数PageHelper.startPage(pageNum,pageSize);//2.执行SQL语句List<Car>cars=mapper.selectAll();//3.执行DQL之后,封装PageInfo对象,newPageInfo对象//第二个参数就是分页导航的卡片个数PageInfo<Car>carPageInfo=newPageInfo<>(cars,3);System.out.println(carPageInfo);sqlSession.close();}}
执行结果:
列举几个常用的属性:
①pageNum-页码, pageSize-每页显示的记录, size=3, startRow-从第几条数据开始, endRow-从第几条数据结束, total-总记录条数, pages-页数,
②prePage-上一页的页码, nextPage-下一页的页码, isFirstPage-,是否是第一页 isLastPage-是否是最后一页, hasPreviousPage-有没有上一页, hasNextPage-有没有下一页
③navigatePages-导航页码, navigateFirstPage-导航第一页是几, navigateLastPage-导航最后一页是几, navigatepageNums-存在数据的导航页
怎么用?
在javaweb当中,代用request.setAttribute("pageInfo",carPageInfo)方法,把数据放到request域当中;然后从request域当中取出分页的信息,在前端进行展示!
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
MyBatis分页插件PageHelper如何使用的详细内容,希望对您有所帮助,信息来源于网络。