pagehelper浅见

因时间原因 ,这里先备注一些,以后有时间详细看完记录

pagehelper组件,通过mybatis支持的plugins组件注册的,前提要实现Interceptor接口,PageInterceptor;

然后拦截Executor的query方法,通过拦截参数获取mapperstatement和parameter,还有一个rowBounds分页没用。利用mapperstatement和parameter最终获得组装后的boundsql对象,其中包括获取sqlsource等等。

然后配置一个cacheKey,在最终调用Executor的query方法用的,这个没细看了。

关键的地方要利用pagehelper计算count,以及封装page对象的其他参数,比如pagenums,pages等。

首先提到的是,PageInterceptor有个properties属性,可以支持一些参数配置,比如Dialect,当然不配置的话默认这个Dialect就是pagehelper。这里面PageInterceptor有个缓存对象,用的google的一个cache类。

第一次使用pagehelper分页查询的时候,先生成一个id为xxxX_count的缓存,放到这个cache类里。后面其他分页的时候直接从缓存这里拿。然后用这个生成的假的id生成一个mapperstatement对象,然后解析原mapperstatement对象里面的boundsql,拼装select count() 的sql查到结果,里面没细看了。查到结果后,要setcount()。这里提到一点pagehelper用了threadlocal对象,用这个对象存page对象的,这个page对象很特殊,集成了list。setcount的时候,设置了这个page对象。

后面调用查询结果后,调用afterpage,将结果也set到page对象里,由于page对象一直从threadlocal里面取,安全。

最后一般业务方法拿到list其实是一个page对象,这个地方如果debug看确实有点绕。

结束,以后有时间细写。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值