MyBatis 分页插件 PageHelper 详细教程
官方介绍
如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。
- 物理分页
支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等
- 支持多种分页方式
支持常见的RowBounds(PageRowBounds),PageHelper.startPage 方法调用,Mapper 接口参数调用
- QueryInterceptor 规范
使用 QueryInterceptor 规范,开发插件更轻松。
使用方法
1.引入分页插件
引入分页插件有下面2种方式,推荐使用 Maven 方式。
1)引入jar包
你可以从下面的地址中下载最新版本的 jar 包
- https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
- http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql 解析工具,你还需要下载 jsqlparser.jar:
2)使用maven
在 pom.xml 中添加如下依赖:
<!--pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版本(5.1.10)</version> </dependency> <!-- pagehelper的依赖包:jsqlparser --> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>最新版本(2.0)</version> </dependency>
2.配置拦截器插件
特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor。com.github.pagehelper.PageHelper 现在是一个特殊的 dialect 实现类,是分页插件的默认实现类,提供了和以前相同的用法。
1)在 MyBatis 配置 xml 中配置拦截器插件
<!-- plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下: properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? --> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 --> <property name="param1" value="value1"/> </plugin> </plugins>
2)在 Spring 配置文件中配置拦截器插件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注意其他配置 --> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置参数,一行配置一个 --> <value> params=value1 </value> </property> </bean> </array> </property> </bean>
3)在spring-mybatis.xml中添加拦截器插件
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/stu/mapper/*.xml"></property> <!--pageHelper--> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置参数,一行配置一个 --> <value> helperDialect=postgresql reasonable=true supportMethodsArguments=true params=count=countSql autoRuntimeDialect=true </value> </property> </bean> </array> </property> </bean>
3.分页参数介绍
分页插件提供了多个可选参数,这些参数使用时,按照上面两种配置方式中的示例配置即可。
分页插件可选参数如下:
- dialect:默认情况下会使用 PageHelper 方式进行分页,如果想要实现自己的分页逻辑,可以实现
Dialect(com.github.pagehelper.Dialect) 接口,然后配置该属性为实现类的全限定名称。
下面几个参数都是针对默认 dialect 情况下的参数。使用自定义 dialect 实现时,下面的参数没有任何作用。
具体的参数介绍请参考官方文档 :https://pagehelper.github.io/docs/howtouse/
4.PageInfo类介绍
- PageInfo属性表
//当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int size; //由于startRow和endRow不常用,这里说个具体的用法 //可以在页面中"显示startRow到endRow 共size条数据" //当前页面第一个元素在数据库中的行号 private int startRow; //当前页面最后一个元素在数据库中的行号 private int endRow; //总记录数 private long total; //总页数 private int pages; //结果集 private List<T> list; //前一页 private int prePage; //下一页 private int nextPage; //是否为第一页 private boolean isFirstPage = false; //是否为最后一页 private boolean isLastPage = false; //是否有前一页 private boolean hasPreviousPage = false; //是否有下一页 private boolean hasNextPage = false; //导航页码数 private int navigatePages; //所有导航页号 private int[] navigatepageNums; //导航条上的第一页 private int navigateFirstPage; //导航条上的最后一页 private int navigateLastPage;
5.在代码中的使用
1)官方文档介绍的详细使用方法
2)本人在项目中的简单使用
package com.stu.controller; import com.github.pagehelper.PageInfo; import com.stu.service.StuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** * 页面跳转类 */ @Controller public class PageController { @Autowired private StuService stuService; /** * 跳转到学生列表页面 * @return */ @RequestMapping(value = "/stuBaseMsgPage", method = RequestMethod.GET) public String stuBaseMsgPage(Model model, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "8") int pageSize){ //获得PageInfo PageInfo pageInfo = stuService.selectStuBaseMsgByPageNum(pageNum, pageSize); model.addAttribute("pageInfo", pageInfo); return "student/student"; } }
package com.stu.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.stu.mapper.StuBaseMsgMapper; import com.stu.pojo.StuBaseMsg; import com.stu.service.StuService; import com.stu.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @Service public class StuServiceImpl implements StuService { @Autowired private StuBaseMsgMapper stuBaseMsgMapper; /** * 查询所有学生 * @return 返回一个StuBaseMsg列表 */ @Override public List<StuBaseMsg> selectStuBaseMsgAll() { return stuBaseMsgMapper.selectAll(); } /** * 查询学生信息带分页显示 * @param pageNum 当前页码 * @param pageSize 页面最大容量 * @return PageInfo */ @Override public PageInfo selectStuBaseMsgByPageNum(int pageNum, int pageSize) { //设置分页参数语句必须要先于数据库查询语句 //设置分页参数 PageHelper.startPage(pageNum, pageSize); //获得学生列表 List<StuBaseMsg> stuBaseMsgList = selectStuBaseMsgAll(); //设置PageInfo PageInfo<StuBaseMsg> pageInfo = new PageInfo<>(stuBaseMsgList); return pageInfo; } }
剩下在前端可以参考PageInfo中的属性获取List列表,然后进行遍历
6.MyBatis 和 Spring 集成示例
如果和Spring集成不熟悉,可以参考下面两个
只有基础的配置信息,没有任何现成的功能,作为新手入门搭建框架的基础
7.Spring Boot 待定
- 点赞 1
- 收藏
- 分享
- 文章举报
- Spring Boot系列教程十一: Mybatis使用分页插件PageHelper
- spring+mybatis利用pageHelper分页插件分页
- Mybatis分页插件PageHelper如何直接返回PageInfo
- Mybatis基于MySql分页插件PageHelper的使用
- MyBatis分页插件PageHelper的使用
- Mybatis分页插件-PageHelper(5.0)的使用
- Mybatis分页插件PageHelper的简单使用
- Mybatis分页插件PageHelper的使用
- Mybatis 使用 PageHelper 插件分页
- (转)mybatis数据库物理分页插件PageHelper
- SpringMVC+MyBatis下使用Pagehelper插件实现分页功能!
- Mybatis分页插件 - PageHelper的使用
- Mybatis分页插件PageHelper【copy】
- (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示
- 【MyBatis】MyBatis分页插件PageHelper的使用
- Mybatis分页插件PageHelper的使用
- Mybatis分页插件PageHelper
- mybatis分页插件pagehelper
- Mybatis 数据库物理分页插件 PageHelper
- 2017.12.25 Mybatis物理分页插件PageHelper的使用(二)