mybatis核心流程三大阶段:
Mybatis的初始化:
MyBatis建造者类图:
XMLConfigBuilder: 主要负责解析mybatis-config.xml; XMLMapperBuilder: 主要负责解析映射配置文件; XMLStatementBuilder: 主要负责解析映射配置文件中的SQL节点;
映射器关键类 Configuration : Mybatis启动初始化的核心就是将所有xml配置文件信息加载到Configuration对象中, Configuration是单例的,生命周期是应用级的;
MapperRegistry:mapper接口动态代理工厂类的注册中心。在MyBatis中,通过mapperProxy实现InvocationHandler接口,MapperProxyFactory用于生成动态代理的实例对象;
ResultMap:用于解析mapper.xml文件中的resultMap节点,使用ResultMapping来封装id,result等子元素;
MappedStatement:用于存储mapper.xml文件中的select、insert、update和delete节点,同时还包含了这些节点的很多重要属性;
SqlSource:mapper.xml文件中的sql语句会被解析成SqlSource对象,经过解析SqlSource包含的语句最终仅仅包含?占位符,可以直接提交给数据库执行;
configuration类图解:
ResultMap 类图解:
mappedStatment图解:
初始化过程:
binding模块分析:
MapperRegistry : mapper接口和对应的代理对象工厂的注册中心;
MapperProxyFactory:用于生成mapper接口动态代理的实例对象;
MapperProxy:实现了InvocationHandler接口,它是增强mapper接口的实现;
MapperMethod:封装了Mapper接口中对应方法的信息,以及对应的sql语句的信息;它是mapper接口与映射配置文件中sql语句的桥梁;
解读MapperMethod: MapperMethod:封装了Mapper接口中对应方法的信息,以及对应的sql语句的信息;它是mapper接口与映射配置文件中sql语句的桥梁; MapperMethod对象不记录任何状态信息,所以它可以在多个代理对象之间共享;
SqlCommand : 从configuration中获取方法的命名空间.方法名以及SQL语句的类型;
MethodSignature:封装mapper接口方法的相关信息(入参,返回类型);
ParamNameResolver: 解析mapper接口方法中的入参;
SqlSession查询接口嵌套关系:
Executor的三个实现类解读: SimpleExecutor:默认配置,使用PrepareStatement对象访问数据库,每次访问都要创建新的PrepareStatement对象;
ReuseExecutor:使用预编译PrepareStatement对象访问数据库,访问时,会重用缓存中的statement对象;
BatchExecutor:实现批量执行多条SQL语句的能力
Executor的三个重要火枪手: StatementHandler:它的作用是使用数据库的Statement或PrepareStatement执行操作,启承上启下作用; ParameterHandler:对预编译的SQL语句进行参数设置,SQL语句中的的占位符“?”都对应BoundSql.parameterMappings集合中的一个元素,在该对象中记录了对应的参数名称以及该参数的相关属性 ResultSetHandler:对数据库返回的结果集(ResultSet)进行封装,返回用户指定的实体类型;
Executor内部运作过程:
StatementHandler分析:
BaseStatementHandler:所有子类的抽象父类,定义了初始化statement的操作顺序,由子类实现具体的实例化不同的statement(模板模式);
RoutingStatementHandler:Excutor组件真正实例化的子类,使用静态代理模式,根据上下文决定创建哪个具体实体类;
SimpleStatmentHandler :使用statement对象访问数据库,无须参数化;
PreparedStatmentHandler :使用预编译PrepareStatement对象访问数据库;
CallableStatmentHandler :调用存储过程
ResultSetHandler分析: ResultSetHandler将从数据库查询得到的结果按照映射配置文件的映射规则,映射成相应的结果集对象
日志打印类: ConnectionLogger:负责打印连接信息和SQL语句,并创建PreparedStatementLogger; PreparedStatementLogger:负责打印参数信息,并创建ResultSetLogger ResultSetLogge:r负责打印数据结果信息
反射核心类:
ObjectFactory:MyBatis每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建POJO;
ReflectorFactory:创建Reflector的工厂类,Reflector是MyBatis反射模块的基础,每个Reflector对象都对应一个类,在其中缓存了反射操作所需要的类元信息;
ObjectWrapper:对对象的包装,抽象了对象的属性信息,他定义了一系列查询对象属性信息的方法,以及更新属性的方法;
ObjectWrapperFactory: ObjectWrapper 的工厂类,用于创建ObjectWrapper ;
MetaObject:封装了对象元信息,包装了MyBatis中五个核心的反射类。也是提供给外部使用的反射工具类,可以利用它可以读取或者修改对象的属性信息;
来源:oschina
链接:https://my.oschina.net/u/2833314/blog/3233863