MyBatis PageHelper

参考

1. PageHelper使用流程

1.1. 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<dependencies>
<!-- log4j 用于mybatis输出日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
</dependencies>

1.2. 配置拦截器插件

在MyBatis配置文件中配置拦截器插件

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

</plugin>
</plugins>

1.3. Mapper和映射

1
2
3
public interface AuthorMapper {
List<Author> selectAll();
}
1
2
3
<select id="selectAll" resultMap="demo.mybatis.entity.Author">
SELECT * FROM author
</select>

1.4. 测试分页查询

1
2
3
4
5
6
7
8
9
@Test
public void test() {
int page = 2; // 页码,从1开始
int pageSize = 3; // 页大小
PageHelper.startPage(page, pageSize); // 在查询之前调用PageHelper.startPage
AuthorMapper mapper = sqlSession.getMapper(AuthorMapper.class);
List<Author> list = mapper.selectAll(); // 查询
list.forEach(System.out::println);
}

2. PageHelper 一次性原则

注意,分页查询只对紧跟的首次查询有效,之后自动失效

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void test() {
int page = 2;
int pageSize = 3;
PageHelper.startPage(page, pageSize);
AuthorMapper mapper = sqlSession.getMapper(AuthorMapper.class);

List<Author> list = mapper.selectAll(); // startPage()之后的首次查询,会分页
list.forEach(System.out::println);

List<Author> list2 = mapper.selectAll(); // 首次查询之后,不再分页
list2.forEach(System.out::println);
}

之后的查询如果还想分页,则必须再调用PageHelper.startPage()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void test() {
int page = 2;
int pageSize = 3;
PageHelper.startPage(page, pageSize);
AuthorMapper mapper = sqlSession.getMapper(AuthorMapper.class);

List<Author> list = mapper.selectAll();
list.forEach(System.out::println);

PageHelper.startPage(page, pageSize); // 再启用分页
List<Author> list2 = mapper.selectAll();
list2.forEach(System.out::println);
}

3. PageInfo的使用

PageInfo是用来获取分页结果的额外信息的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Test
public void test() {
int page = 2;
int pageSize = 3;
// 分页查询
PageHelper.startPage(page, pageSize);
AuthorMapper mapper = sqlSession.getMapper(AuthorMapper.class);
List<Author> list = mapper.selectAll();

// 获取分页额外信息
PageInfo<Author> info = new PageInfo<>(list);
System.out.println("info.getPageNum() = " + info.getPageNum()); // 当前页码
System.out.println("info.getPageSize() = " + info.getPageSize()); // 页大小
System.out.println("info.getStartRow() = " + info.getStartRow()); // 首条记录是第几行记录(从1开始)
System.out.println("info.getEndRow() = " + info.getEndRow()); // 最后的记录是第几行记录(从1开始)
System.out.println("info.getTotal() = " + info.getTotal()); // 总记录数(不开启分页,能查询到的记录数)
System.out.println("info.getPages() = " + info.getPages()); // 总页数,根据总记录数和页大小可以算出
System.out.println("info.getSize() = " + info.getSize()); // 当前查询到多少条记录,如果当前页不是最后一页,则与getPageSize()大小相同,若是最后页,则不一定相同

System.out.println("info.getPrePage() = " + info.getPrePage()); // 上一页的页码
System.out.println("info.getNextPage() = " + info.getNextPage()); // 下一页的页码
System.out.println("info.getList() = " + info.getList()); // 查询结果
System.out.println("info.isIsFirstPage() = " + info.isIsFirstPage()); // 当前页是不是首页
System.out.println("info.isIsLastPage() = " + info.isIsLastPage()); // 当前页是不是最后一页
}
panchaoxin wechat
关注我的公众号
支持一下