专业的编程技术博客社区

网站首页 > 博客文章 正文

面试官:精通 Mybatis?请回答下这几个问题(二)

baijin 2024-09-26 06:52:41 博客文章 4 ℃ 0 评论

接上节,面试官:精通 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 分页的理解吗?

关于数据分页,主要分两种,

  1. 逻辑分页:逻辑分页又叫假分页。即虽然看起来实现了分页的功能,但实际上是将查询的所有结果都放在内存中,每次都从内存获取,适用于数据量较少的情况。
  2. 物理分页:物理分页就是真分页。也就是每次都是按条件查询数据库,取出需要的当前页数据,适用于数据量大的情况。

Mybatis 的分页也归属于上面两类,主要有以下三种实现,

1、自带逻辑分页 RowBounds

Mybatis 的自带分页 RowBounds 是逻辑分页。一次性查出所有数据,然后在内存中进行假分页的实现。

2、自实现物理分页

自实现物理分页也比较简单,就是我们在sql语句中指定limit和offset值,具体可以使用RowBounds来作为参数进行分页。

3、PageHelper 物理分页

PageHelper是Mybatis常用的物理分页插件,可以理解为一个拦截器。她的实现原理可以简单描述为对SQL拦截,然后拼接上分页SQL来实现的。就是在StatementHandler之前进行拦截,对MappedStatement进行分页SQL参数的拼接。

今天我们又看了两个问题,Mybatis的执行流程和分页实现。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表