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:处理查询出来的结果集

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值