Mybatis 分页插件 PageHelper 使用教程

457 阅读3分钟

@[TOC](Mybatis 分页插件 PageHelper 使用教程)

1. 引入 maven 依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.4</version>
</dependency>

这里我使用的是 <version>4.1.4</version>, 截止到 2021 年 11 月 16 日,PageHelper 最新版本为 5.3.0版本。值得注意的是,在版本经过更新之后,相应的配置语句也会做出略微的修改,因此我建议在初学阶段务必与我的版本保持一致,因为后面的教程都是基于该版本给出的,如不一致后面大概率会出错的,浪费时间去解决bug.

2. 在 Mybatis 配置 xml 中配置拦截器插件

在 mybatis.xml 配置文件中,引入拦截器插件。当然关于 mybatis 配置文件的名称应该根据个人习惯来,不是一定要命名成 mybatis.xml, 我只是给了一个在初学阶段用的比较多的名称。

<plugins>
    <!-- com.github.pagehelper 为 PageHelper 类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <!-- 目前支持的数据库类型有 Oracle, Mysql, MariaDB, SQLite, Hsqldb, PostgreSQL 六种数据库-->
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>

<property name ="dialect" value="mysql"> 中,有个属性 dialect, 英文翻译的意思就是 “方言” ,也就是说 PageHelper 插件根据具体的dialect值,提供相应的实现。这主要是因为每种数据库的语法规则不尽相同,从而 PageHelper 会针对支持的六种数据库做出相应的实现。

3. 在 Spring 配置文件中配置拦截器插件

现在很多项目都是基于 SSM 或者 SpringBoot, 不可能只用到 mybatis 一个框架,往往需要和 Spring、SpringMvc 整合起来用,需要将 mybatis.xml 配置整合到 spring-config.xml 中。

<!--spring和mybatis整合的工厂bean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis.xml" />
</bean>

这里我只是将 mybatis.xml 中的相关配置引入了 spring-config.xml 文件中,其实还应该有数据源的配置以及包扫描一些配置,这个还是根据项目情况进行配置的,我只是给出如何使用拦截器插件的教程。

4. 在代码中使用

相关的配置都弄好之后,终于可以在代码中调用 PageHelper 插件了。

 // 检查项分页查询
@Override
public PageResult pageQuery(QueryPageBean queryPageBean) {
     Integer currentPage = queryPageBean.getCurrentPage();
     Integer pageSize = queryPageBean.getPageSize();
     String queryString = queryPageBean.getQueryString();
     // 完成分页查询,基于mybatis框架提供的分页助手插件完成
     PageHelper.startPage(currentPage, pageSize);
     Page<CheckItem> page = checkItemDao.selectByCondition(queryString);
     // 查询结果的记录总数
     long total = page.getTotal();
     List<CheckItem> rows = page.getResult();
     return new PageResult(total, rows);
}

这里我给出了我在项目中的一段代码,里面的内容具体不用去管它,你只需要关注两行代码:

1. PageHelper.startPage(currentPage, pageSize);

这是一种静态方法调用,在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage() 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。 其中,两个参数 currentPagepageSize 分别表示当前页码和每个分页的大小(每页显示多少条记录)。

2. Page<CheckItem> page = checkItemDao.selectByCondition(queryString);

这行代码中的 selectByCondition 本质就是一个查询语句,你就可以认为是select * from checkitem, 就是这么简单。checkItemDao 去调用 selectByCondition 方法之后,它所得到的查询结果会自动地被分页,原因在上面已经提到过了,之后定义一个 Page 对象 page 去接收它即可。 最后,再调用 page.getResult() 方法取出查询出来的记录列表。数据的展现形式根据自己的情况来呈现,这里我给出我在项目中所查询出来的结果。 在这里插入图片描述 可以看到 total 值为 65,每 10 行记录作为一个分页进行展示。这就是使用 PageHelper 插件可以帮助我们进行快速、简便地进行分页的使用教程。