主要的核心类
- SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
- Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
- StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
- ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
- ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
- TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
- MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装,
- SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- BoundSql 表示动态生成的SQL语句以及相应的参数信息
- Configuration MyBatis所有的配置信息都维持在Configuration对象之中。
SqlSession对象的创建
SqlSession实际上调用的仍然是Executor, 在创建 SqlSession 对象时将执行器作为其属性,
ps: excutor是对于jdbc技术中,Statement的封装
生成mapper对象过程
SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。
sqlsession去configuration中找
Configuration 内部中,将这个操作丢给 MapperRegistry
加载mybatis配置文件中的sql映射文件地址,保存至变量,便于程序中获取类信息
代理对象的生成,从 knownMappers 中查找是否有该类型的类资源,如果存在,通过MapperProxy动态代理我们的Mapper,实例化该Mapper接口对应的代理对象
如果不存在,则抛出异常
Executor的创建过程
- CacheExecutor
- 普通Executor
BatchExecutor、ReuseExecutor、SimpleExecutor,区别可以从他们的名字观察
执行代理方法
MapperProxy
- MapperMethod
就像是一个分发者,他根据参数和返回值类型选择不同的sqlsession方法来执行。这样mapper对象与sqlsession就真正的关联起来了。
参数处理
插件的拦截点
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
Mybatis整体层次结构图 ==> 网上找的