@[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 查询方法会被进行分页。
其中,两个参数 currentPage 和 pageSize 分别表示当前页码和每个分页的大小(每页显示多少条记录)。
2. Page<CheckItem> page = checkItemDao.selectByCondition(queryString);
这行代码中的 selectByCondition 本质就是一个查询语句,你就可以认为是select * from checkitem, 就是这么简单。checkItemDao 去调用 selectByCondition 方法之后,它所得到的查询结果会自动地被分页,原因在上面已经提到过了,之后定义一个 Page 对象 page 去接收它即可。
最后,再调用 page.getResult() 方法取出查询出来的记录列表。数据的展现形式根据自己的情况来呈现,这里我给出我在项目中所查询出来的结果。
可以看到 total 值为 65,每 10 行记录作为一个分页进行展示。这就是使用 PageHelper 插件可以帮助我们进行快速、简便地进行分页的使用教程。