Mybatis分页插件pageHelper的原理(浅谈)

1.概述:PageHelper首先将前端传递的参数保存到page这个对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响,接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,完成分页。

简单使用:

PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());
Page<CheckGroup> page=checkGroupDao.findQuery(queryPageBean.getQueryString());

2.具体概述:pageHelper会将分页的参数信息保存到page对象中存储在本地线程中,通过getLocalPage方法将保存在ThreadLocal中的Page变量取了出来,并且各个线程的变量信息是相互独立的,(也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句,)

pageHelper实现了拦截器调用拦截方法,通过反射机制实现前后置增强,返回的是增强后的page对象

伪代码实现:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_18361601/article/details/106756076
今日推荐