- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
PageHelper
Mybatis 通用分页插件
PageHelper 支持多种数据库:
1. Oracle
2. Mysql
3. MariaDB
4. SQLite
5. Hsqldb
6. PostgreSQL
7. DB2
- SqlServer(2005,2008)
9. Informix
10. H2
11. SqlServer2012
12. Derby
13. Phoenix
PageHelper分页插件
依赖:
<!--pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
mybatis全局配置文件:
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
测试
dao:
//获取所有员工
public List<TblEmployeePO> getEmps();
分页方式一: 通过Page或者P在这里插入代码片ageInfo
/**
* 分页示例
*/
@Test
public void test01(){
//从ioc容器中获取一个sqlSessionFactory
SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
//sqlsession
SqlSession session1 = sqlSessionFactory.openSession();
TblEmployeeMapper mapper1 = session1.getMapper(TblEmployeeMapper.class);
//设置分页
Page<TblEmployeePO> page = PageHelper.startPage(1, 5);
List<TblEmployeePO> emps = mapper1.getEmps();
emps.forEach(tblEmployeePO -> {
System.out.println(tblEmployeePO);
});
System.out.println("当前页面"+page.getPageNum());
System.out.println("总页数:"+page.getPages());
System.out.println("每页记录数:"+page.getPageSize());
System.out.println("总记录数:"+page.getTotal());
System.out.println("使用PageInfo............................");
PageInfo<TblEmployeePO> pageInfo = new PageInfo<TblEmployeePO>(emps);
System.out.println("当前页面"+pageInfo.getPageNum());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("每页记录数:"+pageInfo.getPageSize());
System.out.println("总记录数:"+pageInfo.getTotal());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
List<TblEmployeePO> list = pageInfo.getList();
list.forEach(a->{
System.out.println(a);
});
session1.close();
}
分页方式二: ISelect接口方式
/**
* ISelect接口方式
*/
@Test
public void test03(){
//从ioc容器中获取一个sqlSessionFactory
SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
//sqlsession
SqlSession session1 = sqlSessionFactory.openSession();
TblEmployeeMapper tblEmployeeMapper = session1.getMapper(TblEmployeeMapper.class);
System.out.println("Page的ISelect接口方式..........................");
//设置分页并查询
Page<TblEmployeePO> page = PageHelper.startPage(1, 5).doSelectPage(new ISelect() {
@Override
public void doSelect() {
tblEmployeeMapper.getEmps();
}
});
System.out.println("当前页面:"+page.getPageNum());
System.out.println("总页数:"+page.getPages());
System.out.println("每页记录数:"+page.getPageSize());
System.out.println("总记录数:"+page.getTotal());
List<TblEmployeePO> result = page.getResult();
result.forEach(a->{
System.out.println(a);
});
System.out.println("PageInfo的ISelect接口方式..........................");
PageInfo<TblEmployeePO> pageInfo = PageHelper.startPage(1, 5).doSelectPageInfo(new ISelect() {
@Override
public void doSelect() {
tblEmployeeMapper.getEmps();
}
});
System.out.println("当前页面"+pageInfo.getPageNum());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("每页记录数:"+pageInfo.getPageSize());
System.out.println("总记录数:"+pageInfo.getTotal());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
List<TblEmployeePO> list = pageInfo.getList();
list.forEach(a->{
System.out.println(a);
});
session1.close();
}
分页方式二:lambda用法
/**
* jdk8 lambda用法
*/
@Test
public void test04(){
//从ioc容器中获取一个sqlSessionFactory
SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
//sqlsession
SqlSession session1 = sqlSessionFactory.openSession();
TblEmployeeMapper tblEmployeeMapper = session1.getMapper(TblEmployeeMapper.class);
//设置分页并查询
System.out.println("Page的lambda用法..........................");
Page<TblEmployeePO> page = PageHelper.startPage(1, 5).doSelectPage(()->tblEmployeeMapper.getEmps());
System.out.println("当前页面:"+page.getPageNum());
System.out.println("总页数:"+page.getPages());
System.out.println("每页记录数:"+page.getPageSize());
System.out.println("总记录数:"+page.getTotal());
List<TblEmployeePO> result = page.getResult();
result.forEach(a->{
System.out.println(a);
});
System.out.println("PageInfo的lambda用法..........................");
PageInfo<TblEmployeePO> objectPageInfo = PageHelper.startPage(1, 5).doSelectPageInfo(() -> tblEmployeeMapper.getEmps());
session1.close();
}
基于 PageHelper 分页:
实现步骤:
(1) maven 坐标
(2) 加入 plugin 配置
(3) PageHelper 对象
查询语句之前调用PageHelper.startPage 静态方法。
除了 PageHelper.startPage 方法外,还提供了类似用法的 PageHelper.offsetPage 方法。在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个 MyBatis 查询方法会被进行分页。