Mybatis 执行原理

运行原理

1.通过加载mybatis全局配置文件初始化configuration对象,并解析配置全局配置文件所有的标签同时将内容封装到configuration对象中,进而构建出SqlSessionFactory对象。

2.创建的Executor对象(执行器),将第一步的configuration对象和执行器封装到defaulSqlSession对象中。

3.defaulSqlSession通过getMapper()获取mapper接口的代理对象mapperProxy 
  (mapperProxy中包含defaultSQLSession对象)
4.执行增删改查:
    1)通过defaulSqlSession中的属性Executor创建statementHandler对象;
    2)创建statementHandler对象的同时也创建parameterHandler和 
         resultSetHandler;
    3) 通过parameterHandler设置预编译参数及参数值;
    4)调用statementHandler执行增删改查;
    5)通过resultsetHandler封装查询结果

过程细节

1.创建DefaultSqlSessionFactory

构建并解析全局配置文件标签节点封装到Configuration对象中。

提示:

1. 每一个增删改查标签内容都会被封装到MappedStatement中,然后放入map容器中,key是namespace+标签id,value是对应当前名称空间下的所有MapperStatement对象。

2. 会创建每一个mapper接口对应MapperProxyFactory(mapper代理工厂对象,用来创建代理对象的)封装到map容器中,key是mapper接口全权限定类名,value是MapperProxyFactory对象。

2.创建defaultSqlSession

创建Executor对象,将Executor对象和Configuration对象封装到defaultSqlSession中

提示:

1. 创建执行器时会将事务封装到该执行器中
1. 使用每一个拦截器对Executor进行包装

3.创建mapper代理对象

通过mapper接口的全权限定类名获取MapperProxyFactory(映射代理工厂),再通过映射代理工厂创建代理对象。

3.主要执行查询过程

  1. 创建StatementHandler对象,使用StatementHandler创建原生的Statement对象,同时会让所有的拦截器链包装一下StatementHandler对象;
  2. 在构造StatementHandler对象的同时也会创建ParameterHandler、ResultSetHandler对象,同时也会让所有拦截器链包装ParamterHandler、ResultSetHandler
  3. 在预编译时使用TypeHandler设置参数,将java类型设置成column
  4. 调用原生jdbc执行查询
  5. 将查询结束后使用TypeHandler处理结果集,将column设置成java类型
  6. 返回结果

执行流程图

image

posted @ 2022-04-05 16:25  永无八哥  阅读(106)  评论(0编辑  收藏  举报