当前位置: 首页 > news >正文

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等组件的行为,实现日志记录、性能监控等功能。
http://www.jsqmd.com/news/318305/

相关文章:

  • 改进的鲸鱼优化算法GSWOA优化神经网络模型BP做二分类和多分类预测模型。 程序注释详细,可学习性强
  • 口碑之选!十大执业药师考试培训机构真实测评,这份排名清单超靠谱!
  • 2026年,买宁夏枸杞选哪个品牌好?优先推荐玺赞枸杞,道地认证品牌
  • Spring的定时任务与调度
  • 2026 执业药师考试看什么资料:最新优质书单实力榜揭晓!
  • 全网测评对比!2026执业药师考试资料推荐清单,这三份资料真靠谱!
  • 配置加载与初始化
  • 2026年1月成型机厂家最新推荐:水渠/渠道/沟渠/成型机/水沟一次成型机/农田灌溉渠成型机/混凝土排水沟一次成型机,山东合隆机械专利赋能,口碑领跑
  • day13补
  • 2026年高温熔体压力变送器厂家推荐与行业分析
  • ​三拼域名chaojidao.com深度点评​
  • mongo change stream实践
  • ue 蓝图打印信息
  • DeepSeek辅助总结的GizmoSQL数据库自述文件
  • 线段树优化建图
  • 智慧农业之花卉识别 花草病虫害目标检测 花卉品种识别 植物病虫害预警 花卉品类及病虫害的精准识别 植物病虫害识别 毛毛虫识别第10455期
  • 基于MATLAB r2021b小波散射网络的空气压缩机故障诊断研究
  • AP6256 WIFI模块的低功耗模式psm
  • Quora 多账号内容营销:如何避免被判定为“操纵舆论”?
  • 飞滴网约车项目Day01
  • 2026年女性/ 植发际线 / 美学 / 高颅顶 /鬓角 植发 技术好的植发机构推荐好评榜 美学设计/自然原生感/无尴尬期/全生命周期管理
  • Leetcode会员尊享100题:270.最接近的二叉树值
  • 大数据深度学习|计算机毕设项目|计算机毕设答辩|静脉输液液位检测系统
  • 告别题海战术:主管技师备考的数字化备考方案
  • 剪辑IP口播完整版本
  • 编程作为IT行业中不可或缺的职位
  • 研读主管技师备考攻略:高效掌握考试难点
  • 食品异物检测技术:X光机如何守护食品安全
  • Ollama 远程访问完整实战:One-API + 内网穿透 + Cloudflare Tunnel 全方案解析
  • 实用指南:Rust 动态分发(dyn Trait)详解