返回

MyBatis 源码分析之 Mapper 执行 SQL 过程(三)

见解分享

洞悉执行之谜,纵览 MyBatis SQL 执行全景

作为一名技术博客创作专家,我将在本文中以独到的视角,为您剖析 MyBatis 源码,带您领略 Mapper 执行 SQL 的奥秘。

序幕:从 DefaultSqlSession 获取 Mapper

MyBatis 执行 SQL 的旅程,始于 DefaultSqlSession 获取 Mapper。DefaultSqlSession 是 MyBatis 中的核心类之一,负责管理 SQLSession 的生命周期,并提供各种方法来操作数据库。当我们调用 getMapper 方法时,DefaultSqlSession 会根据 Mapper 接口的类型,从 Configuration 对象中获取对应的 MapperProxy 对象。MapperProxy 对象封装了 Mapper 接口的方法信息,并负责将方法调用转换为 SQL 语句的执行。

第一章:Configuration 的抉择

Configuration 对象是 MyBatis 的核心配置类,负责管理 MyBatis 的各种配置信息。当 DefaultSqlSession 获取 MapperProxy 对象时,Configuration 对象会根据 MapperProxy 对象中的信息,决定使用哪种 Executor 来执行 SQL 语句。Executor 是 MyBatis 中负责执行 SQL 语句的组件,主要有 SimpleExecutor、BatchExecutor、ReuseExecutor 和 CachingExecutor 四种类型。Configuration 对象会根据不同的场景,选择合适的 Executor。例如,如果需要批量执行 SQL 语句,则会选择 BatchExecutor。

第二章:ExecutorFactory 的舞台

ExecutorFactory 是 MyBatis 中负责创建 Executor 的工厂类。当 Configuration 对象决定使用哪种 Executor 类型后,会调用 ExecutorFactory 的 create 方法来创建 Executor 对象。ExecutorFactory 会根据 Executor 类型,创建出对应的 Executor 实例。例如,如果需要创建 SimpleExecutor,则会调用 SimpleExecutorFactory 的 create 方法来创建 SimpleExecutor 实例。

第三章:Executor 执行 SQL 的华彩乐章

Executor 是 MyBatis 中执行 SQL 语句的核心组件。当 Executor 对象创建后,便会开始执行 SQL 语句。Executor 会根据 SQL 语句的类型,选择合适的 StatementHandler 来执行 SQL 语句。StatementHandler 是 MyBatis 中负责处理 SQL 语句的组件,主要有 RoutingStatementHandler、SimpleStatementHandler 和 PreparedStatementHandler 三种类型。Executor 会根据不同的场景,选择合适的 StatementHandler。例如,如果需要执行动态 SQL 语句,则会选择 RoutingStatementHandler。

尾声:Executor 的谢幕

当 Executor 执行完 SQL 语句后,便会关闭与数据库的连接,并释放占用的资源。至此,Mapper 执行 SQL 的过程也就结束了。

结语

通过本文的分析,我们对 MyBatis 中 Mapper 执行 SQL 的过程有了更加深入的了解。希望本文能够帮助读者更好地理解 MyBatis 的执行机制,并在实际开发中更加熟练地使用 MyBatis。

附录:示例代码

// 获取 Mapper
MapperProxy mapperProxy = defaultSqlSession.getMapper(UserMapper.class);

// 创建 Executor
Executor executor = configuration.newExecutor(defaultSqlSession, ExecutorType.SIMPLE);

// 执行 SQL 语句
executor.query(statementHandler, parameterObject, resultHandler);

// 关闭 Executor
executor.close();