我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java 3年面试经验告诉你Mybatis是如何进行分页的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java 3年面试经验告诉你Mybatis是如何进行分页的

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

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

大家好,我是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 3年面试经验告诉你Mybatis是如何进行分页的的文章就介绍到这了,更多相关mybatis分页内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java 3年面试经验告诉你Mybatis是如何进行分页的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录