网站首页 > 博客文章 正文
接上节,面试官:精通 Mybatis?请回答下这几个问题(一)
三、描述下 Mybatis 的执行流程?
1、加载配置文件并初始化(获取SqlSession对象)
配置文件来源于两个地方,配置文件(主配置文件conf.xml和mapper文件*.xml)或java代码中的注解,将sql的配置信息加载成为一个mappedstatement对象,存储在内存之中(包括传入参数的映射配置,结果映射配置,执行的sql语句)。
- sqlSessionFactoryBuilder读取配置,
- 创建DefaultSqlSessionFactory,
- 获取SqlSession对象。
2. 接收调用请求
调用Mybatis提供的api,传入的参数为sql的id(有namespase和具体sql的id组成)和sql语句的参数对象,mybatis将调用请求交给请求处理层。
3. 处理请求
- 根据sql的id找到对应的mappedstatament对象。
- 根据传入参数解析mappedstatement对象,得到最终要执行的sql。
- 获取数据库连接,执行sql,得到执行结果。
- Mappedstatement对象中的结果映射对执行结果进行转换处理,并得到最终的处理结果。
- 释放连接资源。
4. 返回处理结果
返回查询结果,然后流程结束。
四、能谈一下你对 Mybatis 分页的理解吗?
关于数据分页,主要分两种,
- 逻辑分页:逻辑分页又叫假分页。即虽然看起来实现了分页的功能,但实际上是将查询的所有结果都放在内存中,每次都从内存获取,适用于数据量较少的情况。
- 物理分页:物理分页就是真分页。也就是每次都是按条件查询数据库,取出需要的当前页数据,适用于数据量大的情况。
Mybatis 的分页也归属于上面两类,主要有以下三种实现,
1、自带逻辑分页 RowBounds
Mybatis 的自带分页 RowBounds 是逻辑分页。一次性查出所有数据,然后在内存中进行假分页的实现。
2、自实现物理分页
自实现物理分页也比较简单,就是我们在sql语句中指定limit和offset值,具体可以使用RowBounds来作为参数进行分页。
3、PageHelper 物理分页
PageHelper是Mybatis常用的物理分页插件,可以理解为一个拦截器。她的实现原理可以简单描述为对SQL拦截,然后拼接上分页SQL来实现的。就是在StatementHandler之前进行拦截,对MappedStatement进行分页SQL参数的拼接。
今天我们又看了两个问题,Mybatis的执行流程和分页实现。
猜你喜欢
- 2024-09-26 PageHelper在SpringBoot的@PostConstruct中不生效
- 2024-09-26 pageHelper-v4.2源码阅读-分页是怎么实现运行的?
- 2024-09-26 Mybatis分页插件-PageHelper(mybatis分页插件的缺点)
- 2024-09-26 Mybatis面试题(mybatis面试题csdn)
- 2024-09-26 MyBatis源码分享篇---Plugin插件原理
- 2024-09-26 网易工程师推荐的开源神器,一键解决Mybatis分页问题
- 2024-09-26 PageHelper循环依赖的处理(循环依赖aop)
- 2024-09-26 Spring AOP 实现动态数据源(读写分离),底层原理是什么
- 2024-09-26 服务器端开发-经典面试题(服务器端测试面试题)
- 2024-09-26 PageHelper分页后,对list操作会导致分页无效
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)