MyBatis之核心类

核心类

ParameterHandler

参数处理器ParameterHandler(默认参数处理器DefaultParameterHandler)
作用===> 参数解析:参数映射配置、参数映射解析、参数类型解析

MappedStatement

MappedStatement维护了一条节点的封装(包含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维护了一条节点的封装
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

MyBatis之核心类_第1张图片

  • BaseExecutor 一级缓存实现及基础的操作
  • CachingExecutor 二级缓存实现
  • SimpleExecutor 默认执行器
  • BatchExecutor 批量操作执行器
  • ReuseExecutor 可重用的执行器,重用的对象是Statement,也就是说该执行器会缓存同一个sql的Statement,省去Statement的重新创建,优化性能

你可能感兴趣的:(mybatis-3.4.6,MyBatis,核心类)