Mybatis是如何进行分页的

考察目标

Mybatis是Java应用开发的基础框架。而分页又是我们时时都在使用的功能。所以一方面考察的是求职者对于Mybatis框架的使用能力。另外一个方面以此为切入点去深度挖掘Mybatis里面更多的问题。从而去了解求职者对于它的理解程度。

问题解析

数据进行分页是开发里面最基础的功能。一般我们可以把分页分成两类。

第一个是逻辑分页,先查询出所有的数据缓存到内存里面,再根据业务相关的一些需求,从内存的数据里面去筛选出合适的数据进行分页。

第二个是物理分页,直接利用数据库里面所支持的分页语法来实现。比如MySQL里面提供了分页相关的关键词Limit。

Mybatis里面提供了四种分页方式

  1. 在MybatisMapper配置文件里面直接写分页的SQL。这种方式比较灵活。实现起来也比较简单。
  2. 可以通过RowBounds去实现逻辑分页,也就是一次性加载所有符合查询条件的目标数据。根据分页参数的值在内存里面去实现分页。当然在数据量比较大的情况下,JDBC驱动本身会做一些优化。也就是说不会把所有的结果一次性查询存储在ResultSet里面,而是先只加载一部分数据。然后再根据需求去数据库里面滚动去加载对应后续的一个数据。这种方式不适合数据量较大的场景。有可能会频繁地访问数据库造成比较大的压力。
  3. 通过Interceptor拦截器来实现。我们可以通过拦截需要分页的select语句,然后在这个select语句里面去动态拼接分页的关键字,从而去实现分页查询。Interceptor是Mybatis里面提供的一种针对于不同周期的拦截器,比如拦截执行器方法、拦截参数的处理、拦截结果集的处理、拦截SQL语法构建的处理。我们可以拦截不同阶段的处理来实现Mybatis里面相关功能的扩展。这种方式的好处就是可以提供统一的处理机制。不需要再单独维护分页相关的功能。像我们经常使用的PageHelper、MyBatis-Plus、tkmybatis这样一些框架,它们本质上都是通过Mybatis的拦截器进行一个扩展,去帮我们实现了分页的封装。使得我们不需要去关心相关的一些配置。节省了开发时间和配置时间。

总结

对于任何的ORM框架,分页的时间逻辑无外乎两种,不管怎么包装,最终给到开发者的只是使用上的一个差异而已。

回答范例

我认为有三种方式去实现分页。

第一种是直接在Select语句里面去增加一个数据库提供的分页关键字。然后在应用程序里面去传递当前页,以及每页展示的条数就好了。

第二种是使用Mybatis提供的RowBounds对象,实现内存级别分页。

第三种是基于Mybatis里面的Interceptor拦截器,在select语句执行之前动态拼接分页关键字。

参考资料【Mybatis面试系列】B站回答最好的Mybatis面试回答,轻松搞定面试官!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值