Mybatis核心代码梳理

拈花ヽ惹草 提交于 2020-11-30 23:23:31

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中五个核心的反射类。也是提供给外部使用的反射工具类,可以利用它可以读取或者修改对象的属性信息;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!