能说说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、结果处理:对返回结果的类型进行处理,根据对象映射规则,返回相应的对象
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号