Mybatis是如何进行分页的

数据进行分页是最基础的功能,一般可以把分页分成两类:

  1. 逻辑分页,先查询出所有的数据缓存到内存,再根据业务相关需求,从内存数据中筛选出合适的数据进行分页。
  2. 物理分页 ,直接利用数据库支持的分页语法来实现,比如Mysql里面提供了分页关键词Limit

Mybatis提供了四种分页方式:

  1. 在Mybatis Mapper配置文件里面直接写分页SQL,这种方式比较灵活,实现也简单。
  2. RowBounds实现逻辑分页,也就是一次性加载所有符合查询条件的目标数据,根据分页参数值在内存中实现分页。
     

    当然,在数据量比较大的情况下,JDBC驱动本身会做一些优化,也就是不会把所有结果存储在ResultSet里面,而是只加载一部分数据,再根据需求去数据库里面加载。这种方式不适合数据量较大的场景,而且有可能会频繁访问数据库造成比较大的压力。

  3. Interceptor拦截器实现,通过拦截需要分页的select语句,然后在这个sql语句里面动态拼接分页关键字,从而实现分页查询。

    (如图)Interceptor是Mybatis提供的一种针对不同生命周期的拦截器,比如:


      1.拦截执行器方法
      2.拦截参数的处理
      3.拦截结果集的处理
      4.拦截SQL语法构建的处理

    我们可以拦截不同阶段的处理,来实现Mybatis相关功能的扩展。这种方式的好处,就是可以提供统一的处理机制,不需要我们再单独去维护分页相关的功能。


     
  4. 插件(PageHelper)及(MyBaits-Plus、tkmybatis)框架实现这些插件本质上也是使用Mybatis的拦截器来实现的。只是他们帮我们实现了扩展和封装,节省了分页扩展封装的工作量,在实际开发中,只需要拿来即用即可。
     
  5. 总结

    第一种,直接在Select语句上增加数据库提供的分页关键字,然后在应用程序里面传递当前                  页,以及每页展示条数即可。
    第二种,使用Mybatis提供的RowBounds对象,实现内存级别分页。
    第三种,基于Mybatis里面的Interceptor拦截器,在select语句执行之前动态拼接分页关键                     字。

     
  6. 粉丝福利
    我把我这些年面试遇到过的题目和在网上刷题时的高频题,整理成了一个面试文档
    这个文档帮助我给我身边的同学、同事都看过,帮他们也找了一份比较好的工作。
    文档主要是按框架分类建好了索引方便查找,答案也尽量写的全面
    适合准备跳槽面试、离职、在校生准备秋招春招的同学看。
    现在分享给大家,可以在评论扣“578”获取哈,或者直接给我留言哈
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值