能说说MyBatis的工作原理吗 ?

一、MyBatis的工作原理

我们已经大概知道了MyBatis的工作流程,按工作原理,可以分为两大步: 生成会话工厂 、 会话运行


构建会话工厂

构造会话工厂也可以分为两步:

  • 解析 mybatis-config.xml 和所有 mapper.xml 文件

  • 构建 Configuration 对象,包含所有配置信息

  • 创建 SqlSessionFactory


构建SqlSessionFactory

SqlSessionFactory只是一个接口,构建出来的实际上是它的实现类的实例,一般我们用的都是它的实现类 DefaultSqlSessionFactory


Session 会话运行

会话运行是MyBatis最复杂的部分,它的运行离不开四大组件的配合:

  • Executor(执行器)

Executor起到了至关重要的作用,SqlSession只是一个门面,相当于客服,真正干活的是是Executor,就像是默默无闻的工程师。它提供了相应的查询和更新方法,以及事务方法

  • StatementHandler(数据库会话处理器)

StatementHandler,顾名思义,处理数据库会话的。我们以SimpleExecutor为例,看一下它的查询方法,先生成了一个 StatementHandler实例,再拿这个handler去执行query

PreparedStatementHandler看一下它的query方法,其实在上面的 prepareStatement已经对参数进行了预编译处理,到了这里,就直接执行sql,使用ResultHandler处理返回结果

  • ParameterHandler (参数处理器)

PreparedStatementHandler里对sql进行了预编译处理

这里用的就是ParameterHandler,setParameters的作用就是设置预编译SQL语句的参数。里面还会用到typeHandler类型处理器,对类型进行处理

  • ResultSetHandler(结果处理器)

最后的结果要通过ResultSetHandler来进行处理,handleResultSets这个方法就是用来包装结果集的

它会使用typeHandle处理类型,然后用ObjectFactory提供的规则组装对象,返回给调用者


整体上总结一下会话运行:


二、我们最后把整个的工作流程串联起来,简单总结一下:


1、读取 MyBatis 配置文件——mybatis-config.xml 、加载映射文件——映射文件即 SQL 映射文件,文件中配置了操作数据库的 SQL 语句。最后生成一个配置对象


2、构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory


3.、创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法


4、Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护


5、StatementHandler:数据库会话器,串联起参数映射的处理和运行结果映射的处理


6、参数处理:对输入参数的类型进行处理,并预编译


7、结果处理:对返回结果的类型进行处理,根据对象映射规则,返回相应的对象

posted @ 2025-04-27 05:26  jock_javaEE  阅读(28)  评论(0)    收藏  举报