SqlSession的执行流程

一、四大组件


1、Executor(执行器)

Executor:*接口

      CacheingExector:处理二级缓存

      BaseExector:处理一级缓存(抽象类,具体实现由子类实现)

           SimpleExector:执行简单的JDBC代码(日常用的都是这个)

           BatchExcetor:批处理执行JDBC代码

           ReuseExcetor:可重用statement执行JDBC代码

2、StatementHandler

StatementHandler:*接口

      RoutingStatementHandler:路由,确定由哪个StatementHandler实现

      BaseStatementHandler:抽象类,具体实现由子类实现

           SimpleStatementHandler:简单StatementHandler,注入了RoutingStatementHandler属性,实现路由分配

           PrepareStatementHandler:预处理statementHandler(日常都是用的这个)

           CallableStatementHandler:存储过程statementHandler

3、ParameterHandler

ParameterHandler 译为参数处理器,负责为 PreparedStatement 的 sql 语句参数动态赋值

4、ResultSetHandler

ResultSetHandler接口就是将ResultSet结果集映射为Bean、List、Map等Java中的对象或者集合。

二、执行流程


SqlSession#selectList

     |—CachingExecutor#query:从二级缓存中获取查询结果

            |—MappedStatement#getBoundSql:获取执行的sql语句

            |—CachingExecutor#createCacheKey:生成sql语句的缓存

            |—CachingExecutor#query:从二级缓存中查找,对应的数据如果有则返回,没有则向一级缓存查找

                  |—BaseExecutor#query:从一级缓存中查找,若有则返回,没有则查询数据库

                         |—BaseExecutor#queryFromDatabase:将当前的sql语句缓存到一级缓存中

                               |—SimpleExecutor#doQuery:真正的查询数据库的方法

                                    |—Configuration#newStatementHandler:获取StatementHandler对象,即StatementHandler的创建入口

                                    |—SimpleExecutor#prepareStatement:给StatementHandler对象设置参数

                                    |—RoutingStatementHandler#query:路由StatementHandler,确认到底真正干活的是PreparedStatementHandler

                                           |—PreparedStatementHandler#构造方法

                                                   |—Configuration#newParameterHandler:初始化ParameterHandler,即ParameterHandler的创建入口

                                                   |—Configuration#newResultSetHandler:初始化ResultSetHandler,即ResultSetHandler的创建入口

                                          |—PreparedStatementHandler#query:执行jdbc操作,即真正的和数据库底层操作

                                                  |—DefaultResultSetHandler#handleResultSets:处理查询出来的结果集

 

 

 

 

 

上一篇:Mybatis 拦截器实现原理


下一篇:mybatis