本文共 846 字,大约阅读时间需要 2 分钟。
项目中用到了PageHelper插件进行实现分页,分页实现非常简单,引入依赖com.github.pagehelper pagehelper-spring-boot-starter 1.2.10
在调用数据库查询的方法前面添加
PageHelper.startPage(page.getPageNum(), page.getPageSize());
然后执行查询方法
List<ObjPO> list = testMapper.getList(param);
这样就实现了分页了,而且对象是个Page类型的对象,获取总记录数就可以用
int totalCount = ((Page)list).getTotal();
消除分页的方法就用
PageHelper.clearPage();
这个代码后面的所有查询就不再进行分页了。
太简单了,但是怎么实现的呢?带着疑问进行了一下追踪,简单的在此描述下,以免日后忘记。
PageHelper.startPage会生成一个Page对象放到threadlocal中。执行查询的时候,
PageInterceptor拦截器会拦截查询,进行判断是否分页,如果需要分页的话,就执行
beforeCount()判断是否进行count查询,是的话,就组装sql,在要查询的sql最外层套一层select count(0) from ,同时汇报order by干掉。查询出来的总数量会通过
afterCount()方法赋值给ThreadLocal里面page对象的total对象。后续就会将分页的信息组装到limit中,然后结果集组装到page对象中最后返回。 Page其实是继承了ArrayList的一个集合。
PageHelper.clearPage();这个方法会把ThreadLocal里面的当前线程的信息删掉。所以这个之后不会再进行分页。
转载地址:http://emcdi.baihongyu.com/