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对象
伪代码实现: