全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 17 道配套习题

源码架构与核心原理专题

专题说明

本专题深入剖析MyBatis源码架构,涵盖SqlSessionFactory构建流程、SqlSession生命周期管理、Executor执行器体系、四大核心组件(StatementHandler/ParameterHandler/ResultSetHandler/Executor)以及一级/二级缓存的工作机制。

学习目标

  1. 理解SqlSessionFactoryBuilder构建流程和XMLConfigBuilder解析顺序
  2. 掌握SqlSession的生命周期与线程安全特性
  3. 深入理解三种Executor(Simple/Reuse/Batch)及CachingExecutor装饰器
  4. 掌握StatementHandler路由机制与PreparedStatement创建流程
  5. 理解ParameterHandler参数绑定与TypeHandler转换机制
  6. 掌握ResultSetHandler结果映射、嵌套映射与自动映射行为

学习内容

  • SqlSessionFactory构建:XMLConfigBuilder、Configuration、解析顺序
  • SqlSession生命周期:线程安全、资源释放、事务管理
  • Executor体系:Simple/Reuse/Batch、BaseExecutor模板方法、CachingExecutor装饰器
  • StatementHandler:RoutingStatementHandler路由、三种实现类
  • ParameterHandler:DefaultParameterHandler、TypeHandlerRegistry
  • ResultSetHandler:DefaultResultSetHandler、嵌套映射、自动映射

学习建议

源码分析是理解MyBatis的关键,建议结合IDE调试跟踪源码执行流程。Executor的装饰器模式、StatementHandler的路由分发、ResultSetHandler的嵌套映射是面试高频考点,也是开发自定义插件的基础。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(17 题)

1
单选题

在 MyBatis 源码中,SqlSessionFactoryBuilder.build() 方法最终创建的 SqlSessionFactory 默认实现类是哪一个?

A

org.apache.ibatis.session.defaults.DefaultSqlSessionFactory

B

org.apache.ibatis.session.defaults.SimpleSqlSessionFactory

C

org.apache.ibatis.session.Configuration

D

org.apache.ibatis.executor.Executor

2
多选题

在 MyBatis 的 SqlSessionFactory 构建流程中,XMLConfigBuilder.parseConfiguration() 方法会依次解析以下哪些配置节点?(多选)

A

properties

B

settings

C

typeAliases

D

mappers

3
填空题

XMLConfigBuilder 构建 Configuration 对象时,使用 ___________ 解析 XML 配置文件,通过 __________________ 方法按顺序读取所有配置节点,最终调用 build() 方法返回 Configuration 对象。

4
单选题

关于 SqlSession 的生命周期,以下说法正确的是?

A

SqlSession 是线程安全的,可以在多个线程间共享使用

B

SqlSession 是非线程安全的,每个线程应该有自己的实例

C

SqlSession 应该作为类的静态字段长期持有

D

SqlSession 使用完毕后不需要关闭,GC 会自动回收资源

5
多选题

SqlSessionFactory.openSession() 方法在创建 SqlSession 时,会完成以下哪些操作?(多选)

A

从数据源获取新的数据库连接

B

根据配置创建对应的 Executor 实例

C

初始化 Transaction 事务对象

D

自动执行第一条 SQL 语句

6
判断题

调用 SqlSession.close() 方法时,会同时关闭底层的数据库连接和回滚未提交的事务。

A

B

7
单选题

在 MyBatis 的三种基本 Executor 中,哪种执行器会缓存 PreparedStatement 对象,适用于频繁执行相同 SQL 的场景?

A

SimpleExecutor

B

ReuseExecutor

C

BatchExecutor

D

CachingExecutor

8
多选题

BaseExecutor 作为 Executor 的抽象基类,实现了以下哪些核心方法?(多选)

A

query() - 查询方法,含一级缓存逻辑

B

update() - 更新方法,清空一级缓存

C

createStatement() - 创建 Statement 对象

D

commit()/rollback() - 事务控制方法

9
简答题

请简述 CachingExecutor 的工作机制,以及它如何实现二级缓存功能。

10
单选题

在 MyBatis 中,当 SQL 语句包含 ${} 占位符时,会使用哪种 StatementHandler 实现?

A

SimpleStatementHandler

B

PreparedStatementHandler

C

CallableStatementHandler

D

RoutingStatementHandler

11
多选题

关于 RoutingStatementHandler,以下说法正确的有哪些?(多选)

A

它是 StatementHandler 接口的默认路由实现

B

它根据 MappedStatement.getStatementType() 决定使用哪个具体 Handler

C

它本身实现了 SQL 执行逻辑

D

它在构造时就会创建被委托的具体 Handler 实例

12
单选题

MyBatis 中 ParameterHandler 接口的默认实现类是哪一个?

A

DefaultParameterHandler

B

SimpleParameterHandler

C

RoutingParameterHandler

D

PreparedStatementParameterHandler

13
填空题

DefaultParameterHandler.setParameters() 方法中,通过 ___________________ 获取对应的 TypeHandler,然后调用 ___________________ 方法将 Java 对象设置到 PreparedStatement 的指定位置。

14
单选题

MyBatis 中负责将 ResultSet 结果集映射为 Java 对象列表的组件是?

A

DefaultResultSetHandler

B

SimpleResultSetHandler

C

ResultSetMapper

D

ResultMapHandler

15
多选题

DefaultResultSetHandler 处理结果集映射时,支持以下哪些映射方式?(多选)

A

简单属性映射(列名到属性名)

B

嵌套结果映射(association/collection with resultMap)

C

嵌套查询映射(association/collection with select)

D

动态代理映射

16
判断题

ResultMap 中未定义 result 映射时,MyBatis 会自动根据列名与属性名的对应关系进行自动映射。

A

B

17
简答题

请描述从 SqlSessionFactoryBuilder.build()SqlSession.selectOne() 执行的完整流程中,涉及的核心组件及其作用。

← 上一个专题 注解开发专题
下一个专题 → 生产环境最佳实践专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库