一、基础框架图
二、各模块的基本作用
--------------------基础支持层--------------------
1、反射模块
MyBatis的反射模块中专门对原生的java反射进行了良好的封装,提供简洁易用的API,方便上层调用。并且对反射操作进行了优化,提高反射性能。
2、类型转换模块
别名机制和JDBC类型与Java类型之间的转换都需要改模块提供支持。
3、日志模块
记录程序运行或是调试时的日志,有助于排查程序异常。
4、资源加载模块
主要是对类加载器进行封装,提供了加载类文件以及其他资源文件的功能。
5、解析器模块
主要提供两个功能:一个是对XPath进行封装,为MyBatis初始化解析配置文件和映射文件提供支持;另一个功能是为处理动态SQL语句中的占位符提供支持。
6、数据源模块
MyBatis自身提供了相应的数据源实现,当然也提供了与第三方数据源集成的接口。
7、事务管理
MyBatis自身提供了相应的事务管理接口和简单的实现。在很多场景中,MyBatis会与Spring框架集成,并由Spring框架提供管理事务。
8、缓存模块
MyBatis提供了一级缓存和二级缓存,由于MyBatis提供的缓存是和程序共用JVM内存的,如果缓存数据过大,可能会影响系统中其他功能的运行,所以需要大量缓存是优先考虑使用其他缓存产品。
9、Binding模块
该模块将用户自定义的Mapper接口与映射文件关联起来,系统可以通过调用自定义接口中的方法来完成SQL的执行。
--------------------核心处理层--------------------
1、配置解析
MyBatis在初始化过程中,会加载配置文件mybatis-config.xml配置文件、映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应对象并保存到Configuration对象中。之后利用Configuration对象创建SqlSessionFactory对象。待MyBatis初始化之后,可以使用SqlSessionFactory创建SqlSession对象来完成数据库操作。
2、SQL解析与scripting模块
为MyBatis的动态 SQL提供支持。scripting模块会根据用户传入的实参,解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句。之后会处理SQL语句中的占位符,绑定用户实参。
3、SQL执行
SQL语句的执行涉及多个组件,其中比较重要的是Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,他会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集,最后通过ResultSetHandler完成结果集的映射,得到结果对象并返回。
4、插件(略)
--------------------接口层--------------------
1、SqlSession
主要是SqlSession接口,该接口定义了MyBatis提供给应用程序调用的API。