PageHelper使用
https://blog.csdn.net/qq_35387940/article/details/91530234
源码解析
分页,首先是查询该页结果列表,同时还要查寻总共多少条,因为前端页面要去展示分页的导航栏等信息,换句话其实有两条SQL
使用PageHelper本身肉眼看到的就是一个查询,而且这个查询没有limit分页的参数,总数的查询也看不到,其实这些都隐藏起来了
PageHelper使用SQL增强的方法自动帮我们做了SQL的拼接,总数的查询。
PageHelper.startPage();
作用仅仅是将分页的参数进行封装到线程变量中,这个变量在拦截器中做sql增强的时候会使用到;
注意点,使用的时候下一个查询SQL必然是分页的,所以如果有分支判断的时候需要谨慎,防止不必要的查询使用了分页
SpringBoot整合,其实是使用了拦截器,PageInterceptor进行SQL增强。
源码解析中遇到一个挺有意思的设计
1 分页参数封装
PageHelper.startPage(pageNum, pageSize);
设置分页参数保存到线程变量中;此为PageHelper设计规则 还有另外一种方式设置分页参数采用RowBond 采用此种方法需要注意的时候查询紧随其后,因为下一次查询必分页
初始创建Page对象的时候创建的类型没有确定,是一个泛型,这种情况Idea显示看不到值,不确定参数,那么就是Object对象
2 mybatis查询返回参数采用Page 来进行接收参数
Page 来进行接收参数 本身继承ArrayList 同时还可以获取到查询总条数的记录 实际是两条SQL的结果集合并,正常返回是一个List,在此基础上重新定义了一个数据结构Page,其实质还是List,采用继承,属性包含
SQL增强的整体流程可以参考如下文献
参考文献
https://blog.csdn.net/houysx/article/details/80230628