• 【Java面试】3年经验,这个问题该怎么回答 Mybatis是如何进行分页的?


    “Mybatis是如何进行分页的”?

    这是一个工作了3年的同学,在面试的时候遇到的问题。

    Hi,大家好,我是Mic,一个工作了14年的Java程序员。

    经常有同学在后台跟我吐槽在求职过程中遇到的各种面试难题。

    我发现大部分的问题之前的视频都有分析过,考虑到视频可能太过分散,不方便大家学习。

    所以我系统整理了一份20万字的文档,有需要的扫描文章尾端二维码领取。

    下面我们来分析一下面试官对于这个问题的考察意图。

    需要面试文档面试文档的小伙伴可以扫描文章底部二维码

    考察目标

    Mybatis是Java应用开发的基础框架,而分页又是我们实时都在使用的功能。

    因此,在我看来,一方面考察的是求职者对Mybatis框架的使用能力。

    另一方面,以此为切入点去深度挖掘Mybatis里面更多的问题,从而了解求职者对它的理解深度。

    这道题考察难度不大,主要考察1-3年Java开发经验的同学。

    问题解析

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

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

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

    Mybatis提供了四种分页方式:

    • 在Mybatis Mapper配置文件里面直接写分页SQL,这种方式比较灵活,实现也简单。

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

      当然,在数据量比较大的情况下,JDBC驱动本身会做一些优化,也就是不会把所有结果存储在ResultSet里面,而是只加载一部分数据,再根据需求去数据库里面加载。

      这种方式不适合数据量较大的场景,而且有可能会频繁访问数据库造成比较大的压力。

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

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

      • 拦截执行器方法

      • 拦截参数的处理

      • 拦截结果集的处理

      • 拦截SQL语法构建的处理

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

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

    • 插件(PageHelper)及(MyBaits-Plus、tkmybatis)框架实现

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

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

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

    高手:

    我认为有三种方式来实现分页:

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

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

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

    如果你喜欢我的作品,记得点赞收藏加关注哦!

    另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!

    【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

    需要高手面试文档面试文档的小伙伴可以扫描下方二维码
    ↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 相关阅读:
    如何使用 NFTScan 的 TON API 实现 NFT 应用开发?
    13年过去了,Spring官方竟然真的支持Bean的异步初始化了!
    【目标检测】【DDPM】DiffusionDet:用于检测的概率扩散模型
    《web课程设计》用HTML CSS做一个简洁、漂亮的个人博客网站
    01-SpringMVC项目构建
    二叉查找树(1)-二叉树-数据结构和算法(Java)
    痞子衡嵌入式:如果i.MXRT1xxx离线无法启动,请先查看SRC_SBMRx寄存器
    Flume从入门实战到精通再到面试一文搞定
    基于SuperMap iObjects C++之地形通视分析
    Idea提升工作效率的必备技巧
  • 原文地址:https://blog.csdn.net/q331464542/article/details/126887398