返回

多年后,PageHelper再教育!!

后端

多年不用PageHelper了,最近新入职的公司,采用了此工具集成的框架,作为一个独立紧急项目开发的基础。项目开发起来,还是手到擒来的,但是没想到,最终测试的时候,深深的给我上了一课。

其实PageHelper的使用很简单,在github上有详细的说明:https://github.com/pagehelper/Mybatis-PageHelper。基于我所用的框架版本和PageHelper版本,具体使用步骤如下:

  1. 配置好MyBatis的配置文件,将PageHelper的jar包放到classpath路径下。
  2. 给要分页的mapper接口,继承PageHelper提供的PageInterceptor接口。
public interface ItemMapper extends PageInterceptor {
	@Select("select * from item")
	List<Item> list();
}

上面是我在项目中用到的mapper接口代码,接口非常简单,继承PageHelper提供的PageInterceptor接口即可。

但是我在测试的时候,发现返回的数据,并没有进行分页,后来发现,是我没有正确使用PageInterceptor。正确使用方式,参考如下:

public interface ItemMapper extends PageInterceptor {
	@Select("select * from item")
	@Page(pageNum = 1, pageSize = 10)
	List<Item> list();
}

在接口的方法上,添加@Page注解,指定pageNum(页码)和pageSize(每页大小),进行分页查询。

然后,我以为就大功告成了,但是还是没有正常分页,我又仔细看了@Page注解,发现我错了,原来@Page注解,还有很多其他的属性,我还没有进行配置,这些配置属性,对于分页功能起着至关重要的作用,于是我又对@Page注解,进行了详细的学习,并按照要求,对注解进行配置:

public interface ItemMapper extends PageInterceptor {
	@Select("select * from item")
	@Page(pageNum = 1, pageSize = 10, reasonable = true)
	List<Item> list();
}

这次,配置了reasonable属性,合理化分页,确保查询返回的结果数量和指定pageSize一致。

至此,我的分页问题,才最终得到解决。总结一下,使用PageHelper进行分页,需要注意以下几点:

  1. 给mapper接口继承PageInterceptor接口。
  2. 在需要分页查询的方法上,添加@Page注解。
  3. @Page注解,配置pageNum(页码)、pageSize(每页大小)、reasonable(合理化分页)等属性。

经过这次深刻的教训,我对PageHelper有了更加深入的理解,也对分页的原理,有了更全面的认识。以后再遇到分页问题,我一定可以得心应手的解决了。