一、• PageHelper是MyBatis中非常方便的第三方分页插件。
• 官方文档:https://github.com/pagehelper/MybatisPageHelper/blob/master/README_zh.md• 我们可以对照官方文档的说明,快速的使用插件
二、使用步骤
• 1、导入相关包pagehelper-x.x.x.jar 和 jsqlpars0.9.5.jar。
• 2、在MyBatis全局配置文件中配置分页插件。
• 3、使用PageHelper提供的方法进行分页
• 4、可以使用更强大的PageInfo封装返回结果
<!--配置mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
全局配置文件配置插件 :拦截器
<plugins>
<!--这两个自己定义的插件:-->
<!--<plugin interceptor="com.mybatis.plugin.MyFirstPlugin">
<property name="userName" value="root"/>
<property name="password" value="132456"/>
</plugin>
<plugin interceptor="com.mybatis.plugin.MySecondPlugin">
</plugin>-->
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
@Test
public void testPageHelper() throws IOException {
//获取sqlSessionFactory对象
SqlSession session = getSqlSession();
//获取mapper接口,然后调用接口方法,具体的实现在配置文件中有sql
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
//分页查询第一页,每页三条信息
Page<Object> page = PageHelper.startPage(1, 3);
List<Employee> emps = mapper.getEmps();
for (Employee e: emps) {
System.out.println(e);
}
System.out.println("页码大小"+page.getPageSize());
System.out.println("总共多少记录数:"+page.getTotal());
/**************pageInfo******************/
PageInfo<Employee> pageInfo = new PageInfo<>(emps);
System.out.println("是否第一页"+pageInfo.isIsFirstPage());
/********************************************************/
PageInfo<Employee> pageInfos = new PageInfo<>(emps,4);
System.out.println("开始连续显示页码数");
int[] nums = pageInfos.getNavigatepageNums();
for(int i :nums) {
System.out.println(i);
}
}
方式一:传参page
方式二:结果封装为new PageInfo(emps);
1 在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能
2 在查询获取list集合之后,使用PageInfo<T> pageInfo = new PageInfo<>(List<T> list, int
navigatePages)获取分页相关数据
@Test
public void testPageHelper() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
PageHelper.startPage(1, 4);
List<Emp> emps = mapper.selectByExample(null);
PageInfo<Emp> page = new PageInfo<>(emps,5);
System.out.println(page);
}
在PageHelper.startPage() 后面的第一个查询会默认使用分页查询,也就是说不必自己再写一个sql去查询总的条数。查询出来的结果使用pageInfo这个类进行接收。
/*
list:查询出来的数据,也就是上面的集合users
navigatePages:导航分页的数量(这个值不建议写偶数,因为导航分页会不对称)
*/
PageInfo<User> pageInfo = new PageInfo<User>(list,navigatePages);
导航分页(navigatePages)介绍:假设一共有20个页码,页面一次展示5个页面‘
百度的一次展示了10个页码
以当前页码为准,从减2开始,加2结束(保证页面展示5个页码)
假设当前在第3页(开始页:3-2=1,结束页3+2=5)