MyBatis学习-(九)PageHelper快速使用

本文最后更新于:January 24, 2022 pm

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

目录

MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html

导入依赖

1
2
3
4
5
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>

加入plugin配置

根据主配置文件中的顺序规格,需要将plugins放在environments之前。

方式一

此方法是5.0以上版本分页插件的xml配置文件。

1
2
3
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

方式二

5.0以下版本分页插件的xml配置文件,还需要指定数据库名称。

还需要先再加一个依赖:

1
2
3
4
5
6
<!--sql解析器-->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.3</version>
</dependency>

再配置:

1
2
3
4
5
6
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 数据库设置 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>

PageHelper对象

在查询语句(调用方法)之前调用PageHelper.startPage静态方法。

除了PageHelper.startPage方法外,还提供了类似用法的PageHelper.offsetPage方法。在需要进行分页的Mybatis查询方法前调用PageHelper.startPage即可,相邻的第一个mybatis查询方法会被进行分页。

基本用法

1
2
3
4
5
@Test
public void testo6(){ //pagehelper
PageHelper.startPage(1,3); // 页码,页大小。第1页,3条内容。下标从1开始。
List<Person> man = PersonDao.selectAll(); //此方法返回所有用户。不要纠结其他的。
}

示例

数据库中的数据

1
2
3
4
5
6
7
8
9
10
11
12
1001, loong
1002, loong2
1003, loong3
1004, loong4
1005, loong5
1006, loong6
1007, loong7
1008, loong8
1009, loong9
1010, loong10
1011, loong11
1012, loong12

接口中的方法

1
List<Person> queryAll();

mapper文件

1
2
3
4
5
6
7
<select id="queryAll" resultType="com.tothefor.Study1.entity.Person">
<include refid="allS"></include>
</select>

<sql id="allS">
select * from Person
</sql>

第一页查询

1
2
3
4
PersonDao dao = sqlSession.getMapper(com.tothefor.Study1.dao.PersonDao.class);
PageHelper.startPage(1,3);
List<Person> allP = dao.queryAll();
allP.forEach(it-> System.out.println(it));

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
==>  Preparing: SELECT count(0) FROM Person 
==> Parameters:
<== Columns: count(0)
<== Row: 12
<== Total: 1
==> Preparing: select * from Person LIMIT ?
==> Parameters: 3(Integer)
<== Columns: id, name
<== Row: 1001, loong
<== Row: 1002, loong2
<== Row: 1003, loong3
<== Total: 3
Person{id=1001, name='loong'}
Person{id=1002, name='loong2'}
Person{id=1003, name='loong3'}

第二页查询

1
2
3
4
PersonDao dao = sqlSession.getMapper(com.tothefor.Study1.dao.PersonDao.class);
PageHelper.startPage(2,3);
List<Person> allP = dao.queryAll();
allP.forEach(it-> System.out.println(it));

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
==>  Preparing: SELECT count(0) FROM Person 
==> Parameters:
<== Columns: count(0)
<== Row: 12
<== Total: 1
==> Preparing: select * from Person LIMIT ?, ?
==> Parameters: 3(Long), 3(Integer)
<== Columns: id, name
<== Row: 1004, loong4
<== Row: 1005, loong5
<== Row: 1006, loong6
<== Total: 3
Person{id=1004, name='loong4'}
Person{id=1005, name='loong5'}
Person{id=1006, name='loong6'}

其他同理实现。如果最后一页没有足够的数据,则会输出查询到的数据。

报错问题

1
2
3
4
org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor

这是因为你使用的是5.0以上版本的分页插件,但你的plugin配置5.0版本以下的配置方式(本文的方式二)。你只需要改为方式一即可。


本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/e169a369.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!