SqlSession是一个会话,相当于JDBC中的一个Connection对象,是整个Mybatis运行的核心。SqlSession接口提供了查询,插入,更新,删除方法,Mybatis中所有的数据库交互都由SqlSession来完成,分析和理解SqlSession的运行原理是学习整个Mybatis的重点。
SqlSession接口有两个实现SqlSessionManager,DefaultSqlSession。
SqlSessionManager:对SqlSessionFactory 和SqlSession 接口的实现,主要功能是对SqlSessionFactory 和SqlSession的管理,是更高层次的封装
DefaultSqlSession:SqlSession的实现,Mybatis工作时真正调用的类,所有调用都是通过此类来实现。
DefaultSqlSession实现主要有4大组件来完成:Executor,StatementHandler,ParameterHandler,ResultHandler:
Executor(执行器):由他来调度StatementHandler,ParameterHandler,ResultHandler等来执行对应的SQL;
StatementHandler(数据库会话处理器 ):使用数据库的statement(PreparedStatement)来执行SQL;
ParameterHandler(参数处理器):用于对SQL语句中参数的处理;
ResultHandler(结果集处理器):进行最后结果集(ResultSet)的封装返回处理。
Executor
Executor接口主要有三个实现
SimpleExecutor:简单执行器,如果不配置就是mybatis默认的执行器
ReuseExecutor:一种重用预处理语句的执行器
BatchExecutor:针对批量处理的执行器,执行重用语句和批量更新。
SqlSession的调用过程实际就是Mybatis对JDBC的封装过程,这里内容与上一篇文章的内容很多重合。此处的重点在于对SqlSession的四个组件的介绍,加深对mybatis的核心调用过程的理解。代码分析过程仅以select为例,其他update,delete的流程基本一致。