核心类
ParameterHandler
参数处理器ParameterHandler(默认参数处理器DefaultParameterHandler)
作用===> 参数解析:参数映射配置、参数映射解析、参数类型解析
MappedStatement
MappedStatement维护了一条<select|update|delete|insert>节点的封装(包含id和sqlSource)
SqlSource
SQL源码SqlSource(内部含有一个获取BoundSql实例的方法)
作用===> SQL解析:SQL语句配置、SQL语句解析、SQL语句动态生成
org.apache.ibatis.builder.SqlSourceBuilder构建StaticSqlSource
org.apache.ibatis.scripting.xmltags.DynamicSqlSource
执行器
简单执行器SimpleExecutor、批量执行器BatchExecutor、可重用执行器ReuseExecutor、执行器基类BaseExecutor
作用===> SQL执行
ResultSetHandler
结果集处理器ResultSetHandler
作用===> 结果处理和映射:结果映射配置、结果类型转换、结果数据拷贝
XMLConfigBuilder
XMLConfigBuilder继承自抽象类BaseBuilder,用于解析MyBatis的xml配置文件,并将解析结果存放到Configuration对象中
XMLMapperBuilder
XMLMapperBuilder继承自抽象类BaseBuilder,用于解析MyBatis的mapper文件,构建MappedStatement对象
XMLStatementBuilder
XMLStatementBuilder继承自抽象类BaseBuilder,用于解析select|insert|update|delete节点
在org.apache.ibatis.builder.xml.XMLMapperBuilder#configurationElement方法中用到
MyBatis动态代理
相关类
MapperRegistry 用于存储 MapperProxyFactory 对象
MapperProxyFactory动态代理类的工厂,方法MapperProxyFactory#newInstance生成动态代理类(每次请求生成一个新的)
MapperProxy实现了InvocationHandler的类,在其invoke方法中执行Mapper自定义接口
MapperMethod:在MapperMethod#execute方法中真正执行Mapper自定义接口的方法,拦截动作也在execute方法中
MyBatis主要执行流程
1、MapperRegistry的addMapper、getMapper方法
2、MapperProxyFactory的newInstance方法生成代理类
3、MapperProxy的invoke方法
4、MapperMethod的execute方法
5、DefaultSqlSession的增删改查方法
6、构建MappedStatement,MappedStatement维护了一条<select|update|delete|insert>节点的封装
7、BaseExecutor执行update和query方法
8、SimpleExecutor的doQuery和doUpdate方法
9、构建StatementHandler(ParameterHandler给StatementHandler填充参数),StatementHandler执行相应的update和query
10、ResultSetHandler:处理Statement执行后产生的结果集,生成结果列表;处理存储过程执行后的输出参数
MyBatis四大组件
- Executor:执行器,用来调度StatementHandler、ParameterHandler、ResultHandler等来执行对应的SQL。
- StatementHandler:语句处理器,使用数据库的Statement执行操作,是四大对象的核心。
- ParameterHandler:参数处理器,用于对SQL参数的处理。
- ResultSetHandler:结果集处理器,进行最后数据集ResultSet的封装返回处理的。
SqlSession相关
在基本MyBatis中,SqlSessionFactory是使用SqlSessionFactoryBuilder构建的 。在MyBatis-Spring中, 改用SqlSessionFactoryBean(Spring整合MyBatis时)。
查询列表时,会根据有无参数,去调用DefaultSqlSession的方法
org.apache.ibatis.session.defaults.DefaultSqlSession#selectList(java.lang.String)
org.apache.ibatis.session.defaults.DefaultSqlSession#selectList(java.lang.String, java.lang.Object)
org.apache.ibatis.session.defaults.DefaultSqlSession#selectList(java.lang.String, java.lang.Object, org.apache.ibatis.session.RowBounds)
Executor相关
DefaultSqlSession#selectList方法中,执行器来执行SQL
- BaseExecutor 一级缓存实现及基础的操作
- CachingExecutor 二级缓存实现
- SimpleExecutor 默认执行器
- BatchExecutor 批量操作执行器
- ReuseExecutor 可重用的执行器,重用的对象是Statement,也就是说该执行器会缓存同一个sql的Statement,省去Statement的重新创建,优化性能