您的位置:首页 > 其它

MyBatis 分页插件 PageHelper 详细教程

2020-02-03 04:36 323 查看

官方介绍

如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

PageHelper官方文档

- 物理分页
支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等

- 支持多种分页方式
支持常见的RowBounds(PageRowBounds),PageHelper.startPage 方法调用,Mapper 接口参数调用

- QueryInterceptor 规范
使用 QueryInterceptor 规范,开发插件更轻松。

使用方法

1.引入分页插件

引入分页插件有下面2种方式,推荐使用 Maven 方式。

1)引入jar包

你可以从下面的地址中下载最新版本的 jar 包

由于使用了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
  • 收藏
  • 分享
  • 文章举报
可乐加冰冻 发布了4 篇原创文章 · 获赞 1 · 访问量 77 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: