MyBatis分页插件PageHelper如何使用
本篇内容介绍了“MyBatis分页插件PageHelper如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
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 * from tableName ...... limit (pageNum - 1) * pageSize, pageSize
(4)使用limit关键字编写代码进行分页
三兄弟之一: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 { List<Car> selectAllByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);}
三兄弟之二:CarMapper.xml文件,编写sql语句
<?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="selectAllByPage" resultType="Car" > select * from t_car limit #{startInde},#{pageSize} </select></mapper>
三兄弟之三:CarMappeTest类,用来编写测试类
package com.bjpowernode.mybatis.test;import com.bjpowernode.mybatis.mapper.CarMapper;import com.bjpowernode.mybatis.pojo.Car;import com.bjpowernode.mybatis.utils.SqlSessionUtil;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.List;public class CarMapperTest { @Test public void testSelectAllByPage(){ // 应该是从前端获取到页码 int pageNum = 2; // 应该是从前端获取到每页显示的条数 int pageSize = 2; // 起始下标 int startIndex = (pageNum-1)*pageSize; SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = 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> <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 { 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关键字
第2页,每页显示的条数是3,对应的数据库表中的数据就是:
获取PageInfo对象
关键点:
①在查询语句之前,开启分⻚功能。
②在查询语句之后,封装PageInfo对象(PageInfo对象将来会存储到request域当中。在⻚⾯上展示)
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 com.github.pagehelper.PageInfo;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); // 1. 在执行DQL语句之前,开启分页 int pageNum = 1; // 第一页 int pageSize = 3; // 每页显示的条数 PageHelper.startPage(pageNum,pageSize); // 2. 执行SQL语句 List<Car> cars = mapper.selectAll(); // 3. 执行DQL之后,封装PageInfo对象,new PageInfo对象 // 第二个参数就是分页导航的卡片个数 PageInfo<Car> carPageInfo = new PageInfo<>(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域当中取出分页的信息,在前端进行展示!
“MyBatis分页插件PageHelper如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341