一线大厂面试真题-MyBatis是如何进行分页的

考察目

MyBatis是Java应用开发的基础框架,而分页又是我们实时都在使用的功能。因此,在我看来,一方面考察的是求职者对MyBatis框架的使用能力

另一方面,此为切入点去深度挖掘MyBatis里面更多的问题,从而了解求职者对它的理解深度道题考察难度不大,主要考察1-3年Java开发经验的同学。

题解析

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

    1、逻辑分页,先查询出所有的数据缓存到内存,再根据业务相关需求,从内存数据中筛选出合适的数据进行分页。

    2、物理分页  ,直接利用数据库支持的分页语法来实现 ,比如 Mysql 里面提供了分页关键词 Limit

MyBatis 提供了四种分页方式:

    1、在MyBatisMapper配置文件里面直接写分页SQL,这种方式比较灵活,实现也简单

    2、RowBounds 实现逻辑分页,也就是一次性加载所有符合查询条件的目标数据,根据分页参数值在内存中实现分页。

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

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

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

O 拦截执行器方法

O 拦截参数的处理

O 拦截结果集的处理

O 拦截 SQL 语法构建的处理

我们可以拦截不同阶的处理 ,来实现 MyBatis 相关功能的扩展。

这种方式的好处,就是可以提供统一的处理机制,不需要我们再单独去维护分页相关的功能。

    4、插件  ( PageHelper)  及  ( MyBaits-Plus、tkMyBatis)  框架实现

这些插件本质上也是使用 MyBatis 的拦截器来实现的。

只是他们帮我们实现了扩展和封装,节省了分页扩展封装的工作量,在实际开发中,只 需要拿来即用即可。

总结一下,对于任何 ORM 框架,分页的实现逻辑无外乎两种,不管怎么包装,最终给 发者的 ,只是使用上的差异而已么 ,我们来看看高手该如何回答。

问题解答

大概有三种方式来实现分页:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值