pageHelper分页实现原理分析

在查询前调用startPage的时候,会往ThreadLocal里面注入分页信息,并且PageHelper类实现了mybatis的inteceptor的接口,执行sql拼接并完成调用的时候会从ThreadLocal中取出分页信息并拼接到sql后面,返回数据后通过实现mybatis拦截方法afterAll,对分页信息进行封装,封装成功后会调用clearPage清除本地变量,这样子下一个查询就不会分页了,如果下一个也需要分页则继续加startPage设置本地分页线程变量即可


总结:多个查询分页不会互相影响,因为每次调用完成后会清空;返回结果是page对象,不是接口里面定义的list,所以展开是看不到分页信息的,想要看需要先通过getDataTable转换成带有分页信息的对象(PageInfo pageInfo = new PageInfo(list);),打断点的时候可以通过view as object来查看对象信息,如果是view as list则看不到分页信息

pageHelper分页实现原理分析_第1张图片

 pageHelper分页实现原理分析_第2张图片

pageHelper分页实现原理分析_第3张图片

pageHelper分页实现原理分析_第4张图片

pageHelper分页实现原理分析_第5张图片

把list集合按照object方式查看值会发现包含分页信息的,所以这个list需要通过new PageInFo(list)的方式进行处理

使用方法如下:

 在需要分页的controller层调用startPage方法即可,调用service后的对象通过PageInfo进行包装,这样做返回对象会自动载入分页信息的

你可能感兴趣的:(mybatis,pageHelper,mybatis,分页,springboot)