news 2026/6/9 19:46:23

MyBatis执行流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis执行流程

1.SqlSession初始化与获取

  • SqlSession是MyBatis的核心对象,用于执行SQL操作。
  • SqlSessionFactory是创建SqlSession的工厂类,通过build()方法初始化,并通过openSession()方法获取SqlSession。
  • SqlSessionFactoryBuilder是构建SqlSessionFactory的工具类,负责解析配置文件并创建SqlSessionFactory。
示例代码:

java复制

// 构建 SqlSessionFactory public SqlSessionFactory build(InputStream inputStream) { Configuration configuration = new Configuration(); // 创建配置对象 XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder(inputStream); // 解析配置文件 configuration = xmlConfigBuilder.parse(); // 解析 XML 配置 return new DefaultSqlSessionFactory(configuration); // 创建 SqlSessionFactory }

2.SqlSession中的select方法

  • SqlSession提供了selectOne()selectList()等方法,用于执行查询操作。
  • 这些方法最终调用select()方法,通过Executor执行SQL查询。
示例代码:

java复制

public <E> List<E> selectList(String statement, Object parameter) { Executor executor = this.configuration.newExecutor(this, ExecutorType.SIMPLE); // 创建 Executor return executor.query(statement, parameter); // 执行查询 }

3.Executor接口与query()方法

  • Executor是MyBatis的核心执行器,负责执行SQL操作。
  • 常见的Executor实现包括:
    • SimpleExecutor:每次执行SQL时都会创建新的PreparedStatement。
    • ReuseExecutor:重用PreparedStatement。
    • BatchExecutor:批量执行SQL。
  • query()方法通过StatementHandlerResultSetHandler处理SQL的准备、执行和结果映射。
示例代码:

java复制

public List<Object> query(String statement, Object parameter) throws SQLException { StatementHandler handler = configuration.newStatementHandler(); // 创建 StatementHandler Statement stmt = handler.prepare(connection, transaction); // 准备 SQL ResultSetHandler resultSetHandler = configuration.newResultSetHandler(); // 创建 ResultSetHandler return resultSetHandler.handleResultSets(stmt); // 处理结果集 }

4.StatementHandler的工作原理

  • StatementHandler负责SQL的准备工作,包括:
    • 创建PreparedStatement
    • 设置SQL参数。
    • 执行SQL语句。
  • prepare()方法用于预编译SQL语句,并为查询设置参数。

5.ParameterHandler的作用

  • ParameterHandler负责将Java对象中的参数绑定到SQL语句中。
  • setParameters()方法根据SQL语句中参数的顺序,通过PreparedStatement将Java参数绑定到SQL中。

6.ResultSetHandler的工作原理

  • ResultSetHandler负责处理SQL执行后的结果,集将ResultSet中的数据映射到Java对象中。
  • 它会将每一行数据从ResultSet中提取出来,并根据MappedStatement的配置映射为目标对象。

7.MappedStatement的配置与SQL映射

  • MappedStatement是MyBatis中用于封装SQL语句和映射信息的对象。
  • 它包含了:
    • SQL语句。
    • 查询参数类型。
    • 结果类型。
  • MappedStatementSqlSession传递给Executor执行。

8.事务管理与Transaction接口

  • MyBatis使用Transaction接口管理事务,负责开启、提交和回滚事务。
  • Transaction接口的实现由数据库连接控制,MyBatis会根据配置使用不同的事务管理方式(如JDBC事务、管理事务等)。

9.自动生成SQL和参数绑定的流程

  • MyBatis支持动态SQL语句的生成,例如通过<if><choose>等标签生成不同的SQL语句。
  • 在执行时,SqlSession会根据MappedStatement的配置动态构建SQL。
  • ParameterHandler会在执行SQL时,根据用户输入的参数生成最终的SQL语句。

总结

MyBatis通过以下流程完成SQL的执行:

  1. SqlSessionFactory初始化:通过SqlSessionFactoryBuilder解析配置文件,创建SqlSessionFactory
  2. SqlSession获取:通过SqlSessionFactoryopenSession()方法获取SqlSession
  3. SQL执行
    • SqlSession调用Executorquery()方法。
    • Executor通过StatementHandler准备SQL,通过ParameterHandler绑定参数,通过ResultSetHandler处理结果集。
  1. 事务管理:通过Transaction接口管理事务。

补充说明

  1. 动态SQL
    • MyBatis支持通过XML中的<if><choose><when><otherwise>等标签动态生成SQL语句。
    • 这些标签允许根据条件动态拼接SQL,提高灵活性。
  1. 缓存机制
    • MyBatis提供了两级缓存:
      • 一级缓存:SqlSession级别的缓存,同一个SqlSession中重复执行相同的查询语句时,会直接从缓存中获取结果。
      • 二级缓存:Mapper级别的缓存,多个SqlSession可以共享缓存数据。
  1. 插件机制
    • MyBatis支持插件(Interceptor),可以通过插件机制拦截和修改ExecutorStatementHandlerResultSetHandler等组件的行为,实现日志记录、性能监控等功能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 9:38:36

图像基础概念

图像基础概念RAW、Mono和BayerRAW&#xff08;原始数据&#xff09;Bayer&#xff08;拜耳阵列&#xff09;Mono&#xff08;黑白&#xff09;RAW和Bayer的关系&#xff08;包含关系&#xff09;RAW&#xff08;Bayer&#xff09;和Mono的关系&#xff08;并列关系&#xff09;…

作者头像 李华
网站建设 2026/6/8 17:58:10

大数据深度学习|计算机毕设项目|计算机毕设答辩|基于文字识别的文件数字化处理系统的设计与实现

一、项目介绍 在信息化时代&#xff0c;纸质文件向数字化转换的需求日益增长&#xff0c;基于文字识别的文件数字化处理系统应运而生。本文的主要内容包括&#xff1a;利用PyQt设计用户界面&#xff0c;结合OpenCV图像处理技术&#xff0c;实现纸质文件的扫描、图像预处理、文字…

作者头像 李华
网站建设 2026/6/5 14:43:08

机器人租售动作齐?专人控全场

在商用机器人服务现场&#xff0c;任务的呈现始终源于事前约定与人力执行的结合。无论是节日庆典中的多轮登场&#xff0c;还是教育场馆内的一次性演示&#xff0c;机器人的每一次启动、每一段动作&#xff0c;均由服务商人员按计划触发&#xff0c;其行为边界严格限定于客户活…

作者头像 李华
网站建设 2026/6/5 15:39:52

HUAWEI AGC平台,使能HarmonyOS应用开发提质增效

HUAWEI AppGallery Connect &#xff08;简称AGC&#xff09;平台&#xff0c;可为HarmonyOS应用开发者提供开发、测试、运营、分析全链路服务&#xff0c;使能开发者高效开发&#xff0c;为应用质量护航并推动运营增长&#xff0c;实现商业成功。 围绕开发者在应用开发各阶段…

作者头像 李华
网站建设 2026/6/6 16:14:46

低值易耗品管理信息系统的设计与实现(11835)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华