cacheRefElement(context.evalNode("cache-ref")); cacheElement(context.evalNode("cache"));这2个和二级缓存有关
mybatis从整体横观可以分为配置文件加载和sqlsession的执行
配置文件加载:全局和映射文件加载
加载全局配置文件
--XMLConfigBuilder:用来创建Configuration对象工具类
--XMLConfigBuilder#构造方法:实例化Configuration对象
--XPathParser:提供基于xpath(XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历)语法的xml解析器
--调用XPathParser#构造方法:创建document对象,使用dom解析方式
--XMLConfigBuilder:用来解析全局配置文件,用来形成Configuration对象
--XMLConfigBuilder#parseConfiguration:解析根标签下的节点(parseConfiguration方法解析)
--XMLConfigBuilder#mapperElement:解析mappers标签加载映射文件(mapperElement方法解析)
--XMLMapperBuilder#构造方法:实例化xpatparse对象,并获取映射文件都document
--XMLMapperBuilder#parse:解析映射文件,目的是获取mappedstatement对象
--XMLMapperBuilder#configurationElement:解析映射文件
--configurationElement#buildStatementFromContext:解析select,update,insert,delete标签
--XMLStatementBuilder:用来获取configuration对象
--XMLStatementBuilder#parseStatementNode:解析statement节点获取
--MapperBuilderAssistant:mapperstatement构建者助手
--mapperstatement#addmappedstatement:使用构建者模式创建mappedstatement对象,将mappedstatement对象添加到configuration对象中的一个map结构中,key是statement标签的id也就是select标签的id,
--xmllanguagedriver#createsqlsource:创建sqlsource对象
--xmlscriptbuilder#:这个XMLScriptBuilder
类才是真正负责在背后解析mapper文件中的每个<select/>
,<insert/>
,<update/>
,<delete/>
节点内的SQL字符串(其中可能包含动态SQL部分,诸如<if/>
,<where/>
等) 的功臣.