今天主要是看mybatis的源码,分析mybatis的框架实现。提升代码架构能力
我们知道mybatis都需要配置一个config的文件,然后启动:
1.mybatis首先是通过:XMLConfigBuilder 这个类的parseConfiguration方法进行解析我们的配置文件:
private void parseConfiguration(XNode root) { try { //issue #117 read properties first //这个解析properties文件 propertiesElement(root.evalNode("properties")); //解析settings 文件 Properties settings = settingsAsProperties(root.evalNode("settings")); loadCustomVfs(settings); loadCustomLogImpl(settings); //解析配置类别名 typeAliasesElement(root.evalNode("typeAliases")); //加载插件 pluginElement(root.evalNode("plugins")); //加载对象工程 objectFactoryElement(root.evalNode("objectFactory")); objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); reflectorFactoryElement(root.evalNode("reflectorFactory")); settingsElement(settings); // read it after objectFactory and objectWrapperFactory issue #631 environmentsElement(root.evalNode("environments")); databaseIdProviderElement(root.evalNode("databaseIdProvider")); //处理数据类型的使用 typeHandlerElement(root.evalNode("typeHandlers")); //主要是完成mapper文件的解析工作 mapperElement(root.evalNode("mappers")); } catch (Exception e) { throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e); } }
完成上面这边其实也是完成Configuration对象数据的工作,对于配置的数据源等都是通过反射的方式生成对应的实例。接着我们需要重点关注的是:mapperElement,这个方法如何来完成mapper,我们接着往下:
对于节点只能配置:resource 、url 、class 的其中一种。因此解析也就分为3种解析:
1.如果是resource 、url这两种就采用XMLMapperBuilder来解析mpper 2.如果是class 就采用反射加载类到Configuration